python可变对象通过一个过程

时间:2018-08-01 05:50:24

标签: python multiprocessing mutable

我想从通过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]

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

1 个答案:

答案 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()