Python multiprocessing apply_async read/write var in main process at starting subprocess

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(),您会发现它不再有效。

P.S。当您使用 Pool.

时,Queue 似乎不太容易处理