기본 사용법 ## 1. 스레드 풀
# coding: utf-8
from concurrent.futures import ThreadPoolExecutor
import time
def spider(page):
time.sleep(page)
print(f"crawl task{page} finished")
return page
with ThreadPoolExecutor(max_workers=5) as t: # 创建一个最大容纳数量为5的线程池
task1 = t.submit(spider, 1)
task2 = t.submit(spider, 2) # 通过submit提交执行的函数到线程池中
task3 = t.submit(spider, 3)
print(f"task1: {task1.done()}") # 通过done来判断线程是否完成
print(f"task2: {task2.done()}")
print(f"task3: {task3.done()}")
time.sleep(2.5)
print(f"task1: {task1.done()}")
print(f"task2: {task2.done()}")
print(f"task3: {task3.done()}")
print(task1.result()) # 通过result来获取返回值
executor = ThreadPoolExecutor(max_workers=5)
all_task = [executor.submit(send_data,"a" ) for i in range(1,2)]
'''
上面的代码等价于下面的:
all_task = []
for i in range(1,2):
task = executor.submit(send_data,"b" ) # "b"是给 方法send_data 传参,如果send_data有多个参数, executor.submit(send_data,"b","c","d" )
all_task.append(task)
'''
for future in as_completed(all_task):
print("finish the task")
obj_data = future.result()
print("obj_data is ", obj_data)
def send_data(a):
print("a is ", a)
as_completed : 위에서 메인 쓰레드 아 판정 된 태스크의 종료가 아닌 것인지 여부를 결정하는 방법을 제공하지만. 가장 좋은 방법은 작업이 끝나면, 메인 스레드 리턴 결과를 제공하지만, 항상 각 작업이 완료 될 때 판단하지 않습니다. 에 as_completed ThreadPoolExecutorThreadPoolExecutor ()는 직접 결과 (와 작업의 구현 후 자식 스레드) 결과를 반환 하나의 방법입니다
참조 :
대기는,지도 사용법은 다음 링크를 참조 할 수 있습니다 https://www.jianshu.com/p/6d6e4f745c27