2013-05-06 59 views
5

我想創建許多過程, 每個過程輪次秒鐘後比以前的工藝, 即,每道工序之間的時間間隔開始爲5秒, 使: 運行過程1 等待5秒鐘 運行過程2 等待5秒鐘 運行過程3 等待5秒鐘 .....如何從Python進程池中取出處理

像:

 for i in range(10): 
      p = multiprocessing.Process(target=func) 
      p.start() 
      sleep(5) 
     #after all child process exit 
     do_something() 

但我想所有的進程退出 之後調用do_something()我不知道該怎麼辦這裏

與蟒蛇池libary同步,我可以有

pool = multiprocessing.Pool(processes=4) 
    for i in xrange(500): 
      pool.apply_async(func, i) 
    pool.close() 
    pool.join() 
    do_something() 

但在這這樣,4個進程將同時運行, 我不能決定處理之間的時間間隔, 是否有可能創建一個進程池,然後取每個過程,像

pool = multiprocessing.Pool(processes=4) 
for i in xrange(500): 
    process = pool.fetch_one() 
    process(func, i) 
    time.sleep(5) 
pool.close() 
pool.join() 
do_something() 

是否有這樣的庫或源代碼片段,可以滿足我的需求? 感謝

+2

也許你可以給你的func添加一個參數,它是處理之前要等待的秒數。並將該值計算爲5 * i? – mdscruggs 2013-05-06 01:18:44

+2

你想每5秒鐘調用'func' 500次嗎?爲什麼延遲?個人'func'電話最後一次通話多久?你想限制併發(同時)呼叫的數量嗎?如果在'apply_async()'之後添加'time.sleep()'會發生什麼?你想要發生什麼? – jfs 2013-05-06 02:40:16

+0

個人'func'通話持續25秒。我想每5秒鐘調用'func'多次,也許500次或1000次。 – misteryes 2013-05-06 10:07:34

回答

0

只是把建議放在一起,你可以這樣做:

plist = [] 
for i in range(10): 
    p = multiprocessing.Process(target=func) 
    p.start() 
    plist.append(p) 
    sleep(5) 
for p in plist: 
    p.join() 
do_something() 

你可以爲了處理卡住進程給出一個超時參數join();在這種情況下,您必須不斷遍歷列表,刪除已終止的進程,直到列表爲空。