python 异步api ThreadPoolExecutor 、ProcessPoolExecutor(多线程、多进程)
- python==3.7
线程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures._base import Future
from random import randint
worker_num = 5
executor = ThreadPoolExecutor(worker_num )
def do_something(num):
res = f"*{num}{'='* randint(1, 6)}"
print(res)
time.sleep(5)
return res
def test_thread():
# 存放执行状态
wait_for = []
for x in range(0, 10):
future = executor.submit(do_something, x)
future.done()
wait_for.append(future)
# # ALL_COMPLETED等线程中任务全部执行完成再往下执行
# wait(wait_for, timeout=10, return_when=ALL_COMPLETED)
# as_completed方法是一个生成器,在没有任务完成的时候,会一直阻塞,除非设置了 timeout
# 当有某个任务完成的时候,会 yield 这个任务,就能执行 for 循环下面的语句,然后继续阻塞住,循环到所有的任务结束
f: Future
for f in as_completed(wait_for, timeout=10):
# 被调方法的return值
result = f.result()
# 该任务是否完成
is_done = f.done()
print("====end====")
if __name__ == '__main__':
test_thread()
进程
进程使用跟上面类似
from concurrent.futures import ProcessPoolExecutor