python - Python 多处理的管理器列表没有锁?
问题描述
我使用多处理的管理器创建一个列表以在两个进程之间共享。他们只需将 1 加 20 次。最后发现最终结果不是40。看来manager的list不是process-safe?代码如下:
from multiprocessing import Process, Manager
def f(l):
for i in range(20):
l[0] += 1
if __name__ == '__main__':
manager = Manager()
l = manager.list([0] * 10)
p1 = Process(target=f, args=(l,))
p2 = Process(target=f, args=(l,))
p1.start()
p2.start()
p1.join()
p2.join()
print (l)
结果是
[26, 0, 0, 0, 0, 0, 0, 0, 0, 0]
如何以流程安全的方式共享列表?
解决方案
推荐阅读
- flutter - 颤振对话框正在返回旧页面,而不仅仅是关闭垫对话框
- selenium - 如何使用 Selenium 在表中选择不同的行?
- python - 该请求不会从 url1 下载图像,而是从 url2 下载图像。两个网址都在工作
- javascript - mapStateToProps 状态未定义
- java - 无法从 Gradle 应用程序创建胖 jar
- android - 如何使用android-Instrumentation来拖动?
- trix - Basecamp Trix 编辑器从 JSON 加载存储的内容
- r - 如何使用具有 3 个分类的响应变量的 rpart 从模型中绘制 ROC 曲线?
- unit-testing - 使用 cabal 从测试包中导入测试 utils 模块
- python - 优化特定时间段内的唯一id