[英]Python multiprocessing apply_async read/write var in main process at starting subprocess
我正在使用Python 3.5多重處理apply_async。 我的代碼就像task = pool.apply_async(myFunc, args)
。 我在args中傳遞了一個信息(來自Info的對象)。 它有一個名為startTime的數據成員。 我希望當myFunc開始運行時, info.startTime
將被寫為time.time()
。 問題是主進程中的信息和子進程中的信息不相同。 myFunc中的info.startTime = time.time()
不會在主進程中更改信息。 是否有保存startTime的好方法? 謝謝。
池中的進程無法寫入公共變量。 認為它們存在於平行宇宙中。 您將需要某種機制來在它們之間共享信息。 這是一個使用Manager
保留所有過程的時間戳的簡單示例:
from multiprocessing import Pool, Manager, current_process
import time
def do_work(x, ll):
time.sleep(.2)
ll.append(current_process().name + ' took task '+str(x)+' at '+str(time.time()))
if __name__ == '__main__':
with Manager() as manager:
timestamp = manager.list()
p = Pool(processes=4)
for x in range(10):
p.apply_async(do_work, (x, timestamp))
p.close()
p.join()
print(timestamp)
如果將timestamp = manager.list()
更改為簡單的timestamp = list()
,則會看到它不再起作用。
使用Pool
時,PS Queue
似乎不那么容易處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.