Python3使用multiprocessing多进程模块共享变量

本文介绍了如何在Python3中使用multiprocessing模块实现多进程间的变量共享,包括简单变量和字典的共享,并讨论了在Pycharm中运行时遇到的坑,如进程间连接共享字典的问题及解决方案。
摘要由CSDN通过智能技术生成

在使用Python用CPU跑一个人脸识别的模块,神经网络的计算比较耗时,因为Python GIL的限制,因此这里使用多进程来并行跑数据集。

在多个进程之间共享简单变量

有很多张人脸图片,现在使用8个进程来分别对人脸图片进行识别,但是要知道总的进度和正确率,因此这里要在各个进程之间共享变量。这里需要的只是整型无符号变量。

  • 在对总的进度和准确率进行计算的时候要加锁,防止别的进程改变
  • 在使用 print输出的时候要加锁,因为控制台也是资源,要防止抢占
  • 加锁了之后要记得释放锁

假设8个进程共识别了count张图片,然后正确的图片有correct张。思路如下:

  • 在主进程中声明要共享的countcorrect变量,初始化进程的时候传入
  • 在各个进程中识别一张图片count就自增1,识别正确的话correct也要自增1,自增的时候要加锁
  • 控制台输出相关信息的时候也要加锁
# l代表长整型无符号变量
count = multiprocessing.Value('l', 0)
correct = multiprocessing.Value('l', 0)
lock = multiprocessing.Lock()

# 要运行的函数为run(),lis为划分给每个进程的识别图片列表
p = [multiprocessing.Process(target=run, args=(lock, i, count, correct)) for i in lis]

for i in p:
    i.start()
for i in p:
    i.join()

run函数中:

# 多个线程对共享变量进行操作,加锁
lock.acquire()
# 图片已经识别完毕,总数加一
count.value += 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值