作者:tommy来了 | 来源:互联网 | 2024-09-28 08:53
多进程共享对象
我有一个IpConnectionPool对象需要多个进程共享
- 创建BaseManager
- 注册IpConnectionPool对象
- 开启一个IpConnectionPool对象进程
- 获取进程共享IpConnectionPool对象
导包
from multiprocessing.managers import BaseManager
参考代码
# 多进程对象共享
manager = BaseManager()
# 一定要在start前注册,不然就注册无效
# 注册数据库线程池对象
manager.register('IpConnectionPool', IpConnectionPool)
# 启动manager服务(就是开了一个新进程来管理IpConnectionPool对象的)
manager.start()
# 获取进程对象
ipCOnnectionPool= manager.IpConnectionPool()
# 必须在主线程进行创建进程否则报错
pool = multiprocessing.Pool(int(multiprocessing.cpu_count())) # 创建进程池
for i in range(2,3423):
# 将进程对象传入到进程池中使用
pool.apply_async(batchInsert,args=(i,ipConnectionPool),callback=call_back,error_callback=err_call_back)
time.sleep(5)
pool.close()
pool.join()
进程锁
既然变量在进程之间可以共享了,那么同时操作一个变量导致的不安全也随之出现。同多线程一样,进程也是通过锁来解决,而且使用方法都和多线程里相同。
lock = multiprocessing.Lock()
lock.acquire()
lock.release()
lock = multiprocessing.Lock()
with lock: # 自动解锁
color=#FF3366 size=5 >点赞 -收藏-关注-便于以后复习和收到最新内容
有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^