2011-03-17 23 views
1

我有一个多处理代码,用于在特定情况下搜索数据库记录,当它到达数据库的末尾时,循环必须停止,我该怎么做?这里是代码:如何退出Python多重处理循环?

import psycopg2 
from multiprocessing import Pool 

conn = psycopg2.connect(a database) 
query=conn.cursor() 
query.execute(some query) 

def scanfile(): 
    try: row=query.fetchone() 
    except: return False #here the loop must stop 
    #do something with row... 

if __name__=='__main__': 
    pool=Pool() 
    while True: 
     pool.apply_async(scanfile) 
    pool.close() 
    pool.join() 
+1

这听起来像个坏主意。检查http://initd.org/psycopg/docs/usage.html#thread-and-process-safety – 2011-03-17 19:43:16

+0

到目前为止,它工作,它抓住行,并与它做事,但程序永远不会完成。 – Pablo 2011-03-17 19:46:38

回答

1

将您的查询/光标移动为可迭代,让多处理为您分配工作。

import psycopg2 
from multiprocessing import Pool 


def scanfile(row): 
    #do something with row... 


if __name__ == '__main__': 
    conn = psycopg2.connect(a database) 
    query = conn.cursor() 
    query.execute(some query) 
    pool = Pool() 
    pool.map_async(scanfile, query).wait() 
    pool.close() 
    pool.join() 
+0

非常好,它也解决了光标问题。 – Pablo 2011-03-17 21:56:34