1、python global关键字定义的全局变量不能在多进程中共享
2、需要共享参数时应该使用multiprocessing中的Value对象
3、为保证安全性或顺序性,尽量采用进程锁处理任务
# coding=utf-8
import random
from multiprocessing import Pool, Value, Manager
def sayHi(name, lock):
lock.acquire() # 将锁注释掉后运行,可能会看到两个相同的m输出
global m
if not m:
m = random.random()
print(m)
var.value += 1
print(var.value)
print(f"Hi my name is {name}")
lock.release() # 将锁注释掉后运行,可能会看到两个相同的m输出
if __name__ == '__main__':
var = Value('b', 1)
manager = Manager()
lock = manager.Lock()
m = '' # 声明全局变量
p = Pool(3)
names = ['1', '2', '3']
for name in names:
p.apply_async(func=sayHi, args=(name, lock))
p.close()
p.join()
print("Everything is OK")
运行结果:
0.22755737402559417
2
Hi my name is 1
0.22149618264131044
3
Hi my name is 2
0.7481633258976809
4
Hi my name is 3
Everything is OK