1

我是新來的python中的多處理。Python多處理程序沒有運行到最後

基本上我的問題是我想在表集合上並行運行我的python腳本說2個表。

這裏我的python腳本並行地從每個表中讀取數據,然後將這些表中的數據寫入另一個表中。

我寫了下面的代碼片段來創建一個多進程python腳本。但是,當我運行腳本時,它不會完成,也不會引發任何錯誤消息。

count = multiprocessing.cpu_count() 
pool = multiprocessing.Pool(processes=count) 
args = [ ('yelp','localhost:9160','cassa1','flight88'), ('yelp','localhost:9160','cassa1','flight96') ] 
for a in args: 
    print a 
    pool.apply_async(user_input,a) 

欣賞這方面的幫助,因爲我很困惑以及卡在這裏。

+0

你知道,如果在USER_INPUT開始處理或不? – tigeronk2

回答

1

您的腳本在子進程完成其任務之前退出。結尾處加上:

pool.close() # no more tasks 
pool.join() # wait for the remaining tasks to complete 

此外,您還可以使用pool.imap*()方法,而不是:

from multiprocessing import Pool 

def safe_user_input(args): 
    try: 
     return user_input(*args), None 
    except Exception as e: 
     return None, str(e) 

if __name__=="__main__":  
    tables = [ 
     ('yelp','localhost:9160','cassa1','flight88'), 
     ('yelp','localhost:9160','cassa1','flight96') 
    ] 

    pool = Pool() # use all available CPUs 
    for result, error in pool.imap_unordered(safe_user_input, tables): 
     if error is None: # no error 
      print(result)