簡體   English   中英

啟動子流程時,Python多重處理apply_async在主流程中讀取/寫入var

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM