Python-多进程遇到的问题

x33g5p2x  于2021-11-24 转载在 Python  
字(0.9k)|赞(0)|评价(0)|浏览(302)

多进程共享对象

我有一个IpConnectionPool对象需要多个进程共享

  1. 创建BaseManager
  2. 注册IpConnectionPool对象
  3. 开启一个IpConnectionPool对象进程
  4. 获取进程共享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 >点赞 -收藏-关注-便于以后复习和收到最新内容

有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^

相关文章