首页 > 解决方案 > 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]

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

标签: pythonmultiprocessingmutable

解决方案


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

推荐阅读