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
似乎不太容易处理
我正在使用 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
似乎不太容易处理