python - 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()
推荐阅读
- azure-active-directory - 如何以编程方式指定 replyUrlsWithType
- c - 是否可以在不诉诸汇编的情况下在 C 中为字节码解释器实现 JIT?
- python - 三次排序程序的程序正确性
- reactjs - 已部署的 Build Reactjs 项目显示白屏
- android - 调用条带 API 的可调用云函数始终返回 null
- azure-active-directory - 如何向 AAD 用户添加自定义属性并将其包含在发送到客户端应用程序的 JWT 令牌中?
- php - PHP 识别 URL 并显示页面
- google-app-engine - 运行 PHP 7 的 Google App Engine 标准中的 Google Cloud Storage 文件上传错误
- python - 如何重复该过程并将结果存储在新的数据框 pandas
- vba - 如何对 Outlook 进行编程以提前发送电子邮件并在未发送回复时发送另一封电子邮件?