from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
import os
import time
import random
# 1. 产生含有固定数量线程的线程池
# t_pool = ThreadPoolExecutor() # 默认线程数(max_workers = min(32, (os.cpu_count() or 1) + 4))
t_pool = ThreadPoolExecutor(20) # 产生有20个线程的线程池
p_pool = ProcessPoolExecutor(5)
def task():
print('task is running')
time.sleep(random.randint(1, 3))
print('task is over')
return 'task函数返回值'
def func(a):
print(f'我拿到返回值了>>>:{a.result()}')
# 2.将任务提交给线程池
for i in range(200): # 定义200个任务
t_pool.submit(task) # 将任务交给线程池
# 3. 将任务提交给进程池
# 执行过程中,可以按到程序是一波一波的运行,每一波就是你定义进程的数量
if __name__ == '__main__':
for i in range(20):
p_pool.submit(task)
# 4.要获得函数运行结果的返回值
if __name__ == '__main__':
for i in range(20):
# 将task函数返回值传给func函数,func函数拿到返回值可以去干别的事去了
p_pool.submit(task).add_done_callback(func) # 异步回调机制
标签:__,task,20,python,线程,进程,返回值,pool
From: https://www.cnblogs.com/smyz/p/17007658.html