python-3.x - python中的多重处理
问题描述
我想使用多处理来加速我的程序。
import multiprocessing
def read(li,i):
name = "char"
#updating my list here
li[i:i] = [name]
print(li)#this gives [4, 'char', 1]
def write(i):
pass
li= []
if __name__ == '__main__':
i = 1
li =[4]
p1 = multiprocessing.Process(target = read,args = (li,i,))
p2 = multiprocessing.Process(target = write,args = (i,))
p1.start()
p2.start()
p1.join()
p2.join()
print(li)#this gives [4, 1] instead of the expected [4, 'char', 1]
这只是基本程序。在原始程序中,我需要更新这样的列表。列表变量li
没有全局更新。我尝试在没有多处理的情况下做同样的事情,顺便说一句效果很好。我究竟做错了什么?
解决方案
您需要使用multiprocessing
模块也提供的共享状态工具之一。
鉴于您提到更新列表,Array()
可能会有用:
li = Array("i", [4])
如果您还需要更新变量i
,则需要执行类似的操作。
有关详细信息,请参阅文档:https ://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes
推荐阅读
- twitter-bootstrap - 没有空间嵌套的引导按钮
- c# - 使用 UTF-8 编码解码 Base64 字符串
- c# - 如何在流文档中设置页宽 (A4)
- typescript - 有没有办法区分 Javascript/TypeScript 中不同接口类型的对象?
- python - Python - 用最接近的非零颜色填充图像的颜色
- python - 如何根据列值/字符串将数据框中的多行替换为另一个数据框中的行?
- azure-powershell - 如何使用“az storage entity insert”命令将特殊字符插入 Azure 表存储?
- visual-studio - Visual Studio:如何在连续执行中重用相同的控制台
- mongoose - 猫鼬将项目添加到数组
- javascript - 一个函数,它接受两个参数,一个数组和一个元素,它返回给定元素的索引