Python 多进程(二) 进程池 多进程操作同一个List

Python的多线程和多进程

Python的多线程为了数据安全设置了GIL全局解释器锁,而Python的多线程是靠并发的方式实现的,即Python只会在一个进程里永远执行一个线程。这就导致Python多线程的多线程效率低下。

Python中的Pool和Process

Pool是进程池
Process是动态生成进程

Pool的使用

import multiprocessing#引入multiprocessing

pool = multiprocessing.Pool(processes=4)#最大进程数
for i in range(4):
    pool.apply_async(方法, (参数,)) #传入方法和参数
pool.close()
pool.join()

多进程操作同一个List

#进程之间的数据操作是独立的。
#multiprocessing中的Manager方法可以管理多进程的数据。

def __init__(self):
    self.manager = mp.Manager
    self.reslist = self.manager().list()
#这样创建list,无论是读取,都可以进行多进程同时操作。
# 引入参考的例子
#下面举一个ABCD四个打工人共同处理一个问题的情况:
import multiprocessing as mp
from loguru import logger
 
class work():
 
    def __init__(self):
        self.manager = mp.Manager
        self.works = self.manager().list()
        self.members = ["A","B","C","D"]
 
    def create_works(self):
        for i in range(1000):
            self.works.append(i)
 
    def finish_works(self,who):
        while len(self.works) > 0:
            finish = self.works.pop()
            logger.info(f'{who}完成了{finish}')
 
    def start(self):
        self.create_works()
        pool = mp.Pool(processes=4)
        for i,member in enumerate(self.members):
            pool.apply_async(self.finish_works, (member,))
        pool.close()
        pool.join()
 
if __name__ == '__main__':
    work().start()

Reference
https://blog.csdn.net/CorGi_8456/article/details/123249438

posted @   NetUSA  阅读(1408)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示