IT干货网

Python多进程遇到的问题

emanlee 2022年09月17日 编程设计 88 0

多进程共享对象

我有一个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 >


本文参考链接:https://huanmin.blog.csdn.net/article/details/121489007
评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!