python可变对象通过一个过程



我想在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]

有人能告诉我如何修改通过流程传递给函数参数的可变对象吗?

我想你错过了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()

相关内容

  • 没有找到相关文章

最新更新