我想从通过Python进程运行的函数中修改列表值。 以下是其行为的示例。
在python shell中,我定义了一个函数:
代码:
>>> def myfct2(n):
... for i in range(len(n)):
... n[i] = i
... time.sleep(3)
然后使用“无”列表执行它:
代码:
N=[None]*4
>>> N
[None, None, None, None]
>>> myfct(N)
>>> N
[0, 1, 2, 3]
列表可变,因为它是可变的。
现在,如果我在一个过程中执行相同的操作,其行为将有所不同:
代码:
proc=multiprocessing.Process( target=myfct,args=(N,),daemon=True)
N=[None]*4
>>> proc.start()
>>> proc.is_alive()
True
>>> proc.is_alive()
True
>>> proc.is_alive()
True
>>> proc.is_alive()
True
>>> proc.is_alive()
True
>>> proc.is_alive()
False
>>> N
[None, None, None, None]
有人可以告诉我如何修改通过进程传递给函数参数的可变对象吗?
答案 0 :(得分:0)
我认为您错过了proc.join()
。上面的代码在python 3中为我工作。Join使主进程在完成之前等待您创建的进程。因此,也许脚本是在函数中的计算完成之前完成的。
import multiprocessing
import time
def myfct2(n):
for i in range(len(n)):
n[i] = i
time.sleep(3)
print(n)
N=[None]*4
proc=multiprocessing.Process( target=myfct2,args=(N,))
proc.start()
proc.join()