进程池ProcessPoolExecutor基本用法

当我们需要执行的任务较多时,想要创建多个线程或者进程来提高效率,而一个一个创建线或进程比较麻烦,这时我们就可以使用线程池/进程池。

线程池的作用就是开辟一些线程,我们直接给线程池提交任务,线程任务的调度交给线程池来完成。

concurrent.futures 模块提供了 ThreadPoolExecutorProcessPoolExecutor 两个类,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池。 

基本用法如下示例:

import time
from concurrent.futures import ProcessPoolExecutor
import multiprocessing

class TestA(object):
    def func1(self, name, num):
        proc = multiprocessing.current_process()
        while True:
            print(f"{name}--{num}--{proc.name}")
            time.sleep(2)

if __name__ == '__main__':
    ta = TestA()
    with ProcessPoolExecutor(5) as ppool: # 创建一个5个进程的进程池
        for i in range(1, 4):
            ppool.submit(ta.func1, '张三', i) # 将任务函数交给线程池,由线程池去调度

# 运行结果如下:
# 张三--1--SpawnProcess-1
# 张三--2--SpawnProcess-2
# 张三--3--SpawnProcess-3
# 张三--1--SpawnProcess-1
# 张三--2--SpawnProcess-2
# 张三--3--SpawnProcess-3
# ...

with ProcessPoolExecutor(5) as ppool 表示创建进程池,进程池大小为5,即最多有5个进程;

submit(func, *args) 表示将任务函数 func 交给进程池,*args 为任务函数的参数。

ThreadPoolExecutor用法相同。

 

posted on 2023-04-15 14:41  木去  阅读(2400)  评论(0)    收藏  举报