python 线程池用法_python 线程池 ThreadPoolExecutor 的用法

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:

上面虽然提供了判断任务是否结束的方法,但是不能在主线程中一直判断啊。最好的方法是当某个任务结束了,就给主线程返回结果,而不是一直判断每个任务是否结束。

ThreadPoolExecutorThreadPoolExecutor 中 的 as_completed() 就是这样一个方法,当子线程中的任务执行完后,直接用 result() 获取返回结果

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值