python - 在多处理池中使用全局变量
问题描述
我在尝试在多处理池中使用全局变量时遇到问题。我知道这方面已经有很多内容了,但我正在努力实现我的案例的答案。
我有一个要与 pool.map 一起使用的函数。我希望这个函数的输入是一些全局变量,也是另一个改变进程到进程的参数。那就是我想要的东西看起来像:
if __name__ == '__main__':
A = Global Variable Array
B = Global Variable Array
C = Actual Input Array For the Multiprocessing
pool = multiprocessing.Pool()
Res= pool.map(Function,Input = A,B,C)
在上述情况下,只有 C 因进程而异。目前,我的代码仅在我从每个进程中的外部文件导入全局数组时才有效,这似乎非常浪费。
解决方案
multiprocessing
提供了几种在进程之间共享状态的方法。对这些对象的访问可能由lock
arg 同步。
如果
lock
为 True(默认值),则创建一个新的递归锁对象以同步对值的访问。如果lock
是 Lock 或 RLock 对象,那么它将用于同步对值的访问。如果lock
为 False,那么对返回对象的访问将不会被锁自动保护,因此它不一定是“进程安全的”。
来自官方文档的示例:
from multiprocessing import Process, Value, Array
def f(n, a):
n.value = 3.1415927
for i in range(len(a)):
a[i] = -a[i]
if __name__ == '__main__':
num = Value('d', 0.0)
arr = Array('i', range(10))
p = Process(target=f, args=(num, arr))
p.start()
p.join()
print(num.value)
print(arr[:])
推荐阅读
- c++ - 访问 ptr 到节点句柄 c++ 的数组
- amazon-web-services - S3 putObject 事件 - 收到旧版本
- javascript - 为什么我不能将函数输入作为变量来调用函数?
- c++ - 在哈希图中实现分配运算符重载
- matlab - matlab中用AR项估计线性回归的快速方法
- sql - 无论如何要在 SELECT 语句中使用 IN 运算符?如果不是,为什么?
- sql - 与 MS SQL 相比,PostgreSQL 在 Where 和 Group 上的速度非常慢
- java - 使用 Java 流创建具有动态值的员工列表
- tabulator - 使用会计原则格式化负数的制表器
- javascript - 如何将 Props() 值传递给 setState() 以使用 ReactJs 使模态表单可编辑