python中线程池的基本使用

本文介绍了如何使用Python的concurrent.futures模块中的ThreadPoolExecutor进行多线程操作。通过示例展示了创建线程池、指定线程数量、调用函数及参数传递的过程。线程池能够加速函数调用,提高运行效率,但需要注意无法直接获取函数返回值,需进一步学习。

总结一下自己学习python线程池的用法

from concurrent.futures import ThreadPoolExecutor
import time

#需要使用线程的函数
def func(name):
    print(name,'start')
    time.sleep(3)
    print(name,'end')

if __name__ == '__main__':
    #记录时间用
    start_time=time.time()
    #开启线程池,其中3代表线程个数
    with ThreadPoolExecutor(3) as t:
        #需要调用50次函数,也可以换参数传递
        for i in range(50):
            t.submit(func,name=i)
            #括号中第一个是调用的函数名称,不加括号,后面是函数的参数,可以传递多个
    #输出一下好事
    print(time.time()-start_time)

1、首先要导入包

from concurrent.futures import ThreadPoolExecutor

2、然后主代码块

with ThreadPoolExecutor(3) as t:
    for i in range(50):
        t.submit(func,name=i)

第一行3代表线程数,第二行50代表调用函数的次数,第三行代表开启线程,括号中第一个函数名称,第二开始传递参数

优点:线程可以加快50次函数运行速度,开的越多,感觉50函数运行完的越快

缺点:目前不会调用函数返回值的传递,需要进一步学习

Python中,可使用`concurrent.futures`模块中的`ThreadPoolExecutor`类创建线程池。以下是不同的使用方法及调用示例: ### 基本任务提交示例 ```python import concurrent.futures import time # 定义要执行的任务函数 def task(n): print(f"开始执行任务 {n}") time.sleep(2) # 模拟耗时操作 print(f"任务 {n} 执行完毕") return n * n # 创建线程池,最大线程数设置为5 with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: # 提交任务到线程池执行,并获取Future对象列表 futures = [executor.submit(task, i) for i in range(10)] # 遍历Future对象列表,获取任务结果 for future in concurrent.futures.as_completed(futures): result = future.result() print(f"任务结果:{result}") ``` 此示例中,定义了任务函数`task`,使用`ThreadPoolExecutor`创建了最大线程数为5的线程池,通过`executor.submit`方法提交任务,最后使用`concurrent.futures.as_completed`方法获取任务结果并打印出来[^1]。 ### 使用`map`简化批量任务示例 ```python import concurrent.futures # 定义任务函数 def task(n): return n * 3 # 准备数据 numbers = [1, 2, 3, 4, 5] # 创建线程池 with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: # 使用map方法批量处理任务 results = executor.map(task, numbers) # 迭代获取任务结果 for result in results: print(result) ``` 该示例使用线程池的`map`方法批量处理任务,并迭代获取任务的执行结果。定义了`task`函数用于将输入值乘以3,准备了包含多个数值的列表`numbers`,创建了包含3个工作线程的线程池使用`map`方法将`task`函数应用到`numbers`列表的每个元素上,得到结果迭代器并遍历打印结果[^3]。 ### 异步回调示例 ```python import concurrent.futures # 定义任务函数 def task(n): return n * n # 定义回调函数 def callback(future): result = future.result() print(f"回调函数获取到结果: {result}") # 创建线程池 with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: # 提交任务 future = executor.submit(task, 5) # 为任务添加回调函数 future.add_done_callback(callback) ``` 在这个示例中,定义了任务函数`task`和回调函数`callback`,创建线程池后提交任务,为任务添加了回调函数,当任务完成时会自动调用回调函数处理结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值