使用futures模块:
def get_html(sleep_time):
time.sleep(sleep_time)
# print('get_page success', sleep_time)
return 'success,{}'.format(sleep_time)
使用submit提交函数到线程池, 打开一个线程, submit是立即返回, 非阻塞方法
from concurrent.futures import ThreadPoolExecutor
if __name__ == '__main__':
# 参数表示可以同时执行的嘴阀线程数量
excu = ThreadPoolExecutor(3)
# 使用submit提交函数到线程池, 打开一个线程, submit是立即返回, 非阻塞
task1 = excu.submit(get_html, (5))
取消进程, 如果cancel失败会返回一个false, 如果任务处在执行中或者执行完成状态, 则会取消失败
task2 = excu.submit(get_html, (5))
print('查看取消', task2.cancel())
task1 = excu.submit(get_html, (5))
print('查看task1是否完成', task1.done())
task2 = excu.submit(get_html, (5))
print('查看task2的运行返回结果', task2.result())
from concurrent.futures import ThreadPoolExecutor
if __name__ == '__main__':
excu = ThreadPoolExecutor(3)
urls = [2, 3, 4]
# 通过excu.map()获取已经完成的task返回值
for data in excu.map(get_html, urls):
print('the result is ', data)
from concurrent.futures import ThreadPoolExecutor, as_completed,
if __name__ == '__main__':
excu = ThreadPoolExecutor(3)
urls = [2, 3, 4]
# 通过as_completed获取已经完成的task1
all_task = [excu.submit(get_html, (url)) for url in urls]
for future in as_completed(all_task):
data = future.result()
print(data)
from concurrent.futures import ThreadPoolExecutor, as_completed, wait
if __name__ == '__main__':
excu = ThreadPoolExecutor(3)
urls = [2, 3, 4]
# 通过as_completed获取已经完成的task1
all_task = [excu.submit(get_html, (url)) for url in urls]
for future in as_completed(all_task):
data = future.result()
print(data)
wait(all_task)
print('end')
推荐: https://manjusaka.itscoder.com/2017/11/28/something-about-concurrent-future/