python使用线程池多线程执行,并得到返回的结果

多线程的使用场景比如:频繁数据库连接,频繁的资源读取(如频繁读文件、玩命读kafka什么的)

  • 多线程:适合IO密集型
  • 多进程:适合计算密集型

使用线程池的好处是自动管理线程,不会导致线程资源浪费和代码冗余,但是线程之间交换资源会导致额外的同步开销,下面是使用的示例:

示例代码

import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from datetime import datetime


def my_func(param1, param2):  # 多线程执行的函数
    print("开始:", param1, param2, "时间:", datetime.now())
    time.sleep(3)
    return param1, param2


thread_pool = ThreadPoolExecutor(max_workers=4)  # 初始化线程池,指定4线程
thread_mission_list = []  # 用来记录线程的任务对象
for _index in range(30):
    run_thread = thread_pool.submit(my_func, _index, _index)  # 多个参数像这样直接传递即可
    thread_mission_list.append(run_thread)
for mission in as_completed(thread_mission_list):  # 这里会等待线程执行完毕,先完成的会先显示出来
    # 这里会自动等待执行完毕
    print("结束:", mission.result(), "时间:", datetime.now())

结果:

开始: 0 0 时间: 2022-03-04 14:13:56.576031
开始: 1 1 时间: 2022-03-04 14:13:56.576292
开始: 2 2 时间: 2022-03-04 14:13:56.576427
开始: 3 3 时间: 2022-03-04 14:13:56.576566
开始: 4 4 时间: 2022-03-04 14:13:59.578705
开始: 5 5 时间: 2022-03-04 14:13:59.578762
开始: 6 6 时间: 2022-03-04 14:13:59.578812
开始: 7 7 时间: 2022-03-04 14:13:59.578859
结束: (1, 1) 时间: 2022-03-04 14:13:59.578925

其他参考

线程数量的设置可以参考:面试问我,创建多少个线程合适?我该怎么说

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python中,创建线程池有多种方式。其中一种方式是使用multiprocessing.dummy模块中的Pool类。可以通过以下代码创建一个线程池: from multiprocessing.dummy import Pool as ThreadPool pool = ThreadPool() 另外一种方式是使用concurrent.futures模块中的ThreadPoolExecutor类。可以通过以下代码创建一个线程池: from concurrent.futures import ThreadPoolExecutor pool = ThreadPoolExecutor() 这两种方式都可以创建一个线程池,用于执行多线程任务。线程池在系统启动时即创建大量空闲的线程,程序只要将一个函数提交给线程池线程池就会启动一个空闲的线程来执行它。当该函数执行结束后,该线程并不会死亡,而是再次返回线程池中变成空闲状态,在线程池等待任务执行线程池的优点是可以重复利用线程,避免了频繁创建和销毁线程的开销。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [python 多线程 线程池的四种实现方式](https://blog.csdn.net/ye__mo/article/details/123664568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python多线程系列—线程池ThreadPoolExecutor(八)](https://blog.csdn.net/weixin_54542209/article/details/126284730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值