首页 > 编程语言 >Python线程池的概念涉及创建一个线程集合(即线程池)

Python线程池的概念涉及创建一个线程集合(即线程池)

时间:2024-04-05 10:34:13浏览次数:26  
标签:__ Python futures print concurrent 任务 线程 集合

Python线程池的概念涉及创建一个线程集合(即线程池),这些线程预先被初始化并保存在内存中,等待任务的分配和执行。使用线程池可以有效地管理和复用线程资源,提高程序的执行效率。以下是Python线程池相关的概念及其示例程序:

1. 线程池(ThreadPool)

线程池是一个管理线程的集合,它负责线程的创建、调度和销毁。线程池中的线程可以并行执行多个任务,从而提高程序的整体性能。

示例程序:使用concurrent.futures.ThreadPoolExecutor创建线程池
import concurrent.futures  
import time  
  
def task(n):  
    print(f"开始执行任务 {n}")  
    time.sleep(2)  # 模拟耗时操作  
    print(f"任务 {n} 执行完毕")  
    return n * n  
  
if __name__ == "__main__":  
    # 创建一个包含3个线程的线程池  
    with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:  
        # 提交5个任务到线程池  
        futures = [executor.submit(task, i) for i in range(5)]  
          
        # 等待所有任务完成并获取结果  
        for future in concurrent.futures.as_completed(futures):  
            result = future.result()  
            print(f"任务结果:{result}")

2. 任务(Task)

任务是线程池中的执行单元,通常是一个可调用的对象(如函数)。任务被提交到线程池后,线程池中的线程会竞争执行任务。

示例程序:定义并提交任务到线程池
import concurrent.futures  
import time  
  
def task(n):  
    print(f"执行任务 {n} 在线程 {threading.current_thread().name}")  
    time.sleep(n)  # 模拟不同耗时的任务  
    return n * n  
  
if __name__ == "__main__":  
    with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:  
        # 提交任务到线程池  
        future1 = executor.submit(task, 2)  
        future2 = executor.submit(task, 3)  
          
        # 获取任务结果  
        result1 = future1.result()  
        result2 = future2.result()  
          
        print(f"任务1结果:{result1}")  
        print(f"任务2结果:{result2}")

3. Future对象

Future对象表示线程池中的一个异步计算的结果。当任务被提交到线程池时,会返回一个Future对象,通过Future对象可以获取任务的状态、结果或异常。

示例程序:使用Future对象获取任务结果
import concurrent.futures  
import time  
  
def task(n):  
    time.sleep(n)  
    return n * n  
  
if __name__ == "__main__":  
    with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:  
        # 提交任务并获取Future对象  
        future = executor.submit(task, 3)  
          
        # 判断任务是否完成  
        if not future.done():  
            print("任务还未完成")  
          
        # 等待任务完成并获取结果  
        result = future.result()  
        print(f"任务结果:{result}")

4. 线程池大小(Pool Size)

线程池大小指的是线程池中线程的数量。线程池的大小应该根据系统的性能、任务的类型以及任务的并发量来合理设置。过小的线程池可能导致任务执行缓慢,而过大的线程池则可能引发系统资源的过度消耗。

示例程序:设置不同大小的线程池
import concurrent.futures  
import time  
  
def task(n):  
    print(f"执行任务 {n} 在线程 {threading.current_thread().name}")  
    time.sleep(2)  
    return n * n  
  
if __name__ == "__main__":  
    # 设置不同大小的线程池  
    for pool_size in [1, 3, 5]:  
        with concurrent.futures.ThreadPoolExecutor(max_workers=pool_size) as executor:  
            futures = [executor.submit(task, i) for i in range(pool_size * 2)]  
              
            # 等待所有任务完成  
            concurrent.futures.wait(futures)  
        print(f"线程池大小为 {pool_size} 的任务已执行完毕")  
        time.sleep(1)

标签:__,Python,futures,print,concurrent,任务,线程,集合
From: https://blog.csdn.net/weixin_67244432/article/details/137395188

相关文章

  • LeetCode in Python 88. Merge Sorted Array (合并两个有序数组)
    合并有序数组也有两种方法,区别是空间复杂度不同。第一种,重新开辟一个数组空间,大小为O(m+n),另外需要三个指针分别指向两个有序数组和新开辟的数组,依次判断两个数组内元素大小,不断更新指针即可。第二种,无需单独开辟空间,在第一个数组(该数组空间足够存放两个数组总长的数据)内进行......
  • nodejs+python开发基于uniapp的校园跑腿系统 微信小程序
    本文先提出了开发基于uniapp的高校校园跑腿系统的背景意义,然后通过功能性和非功能性分析阐述本系统的需求,然后从功能设计和数据库设计两方面进行系统的设计建模。在技术实现部分采用了nodejs作为开发后台的编程语言,客户端使用uniapp,数据库选择MySQL。最后进行了代码的编写,并说......
  • 【python毕业设计】社区居民健康档案管理系统8cgo7
    典型的应用系统中还需要系统维护这一功能,其主要包括:(1)可以完成社区居民家庭和个人基本信息的维护和查询功能。(2)可以完成社区居民健康档案管理系统用户的添加、删除、修改等功能。(3)可以完成用户组的维护和用户组的查询功能。(4)可以完成数据备份和恢复的功能。(5)可以完成......
  • python3.12.2银河麒麟v10鲲鹏离线快速部署
    python3.12.2银河麒麟v10鲲鹏离线快速部署背景清明假期忙活了一整天发现自己方向走错了.部署效率巨慢无比.其实简单情况下很快就可以弄好.自己最开始使用python3.9使用的是libressl发现最新版已经不需要了.并且使用仓库中的就可以.系统版本说明公司的银河麒麟v10......
  • Python进阶:使用requests库轻松发送HTTP请求并获取响应
    Python进阶:使用requests库轻松发送HTTP请求并获取响应简介:本文将带您深入了解Python中强大的requests库,学会如何使用它发送各种HTTP请求,并轻松获取响应内容。无论您是初学者还是有一定经验的Python开发者,本文都将为您提供实用、详细的指导,助您在网络请求与响应的处理上更上......
  • python相机校准
    文章目录张正友标定法角点检测标定去畸变张正友标定法相片是三维世界在二维平面上的投射,故而其深度信息是损失掉了的。但是,如果把拍照看作理想的小孔成像过程,那么相片中的每个像素,都将通过一个锥体与世界中真实的点一一对应,这时如果再来一条参考光线,那么理论上就可......
  • PYTHON蓝桥杯——每日一练(简单题)
    题目查找整数给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。输入格式第一行包含一个整数n。第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。第三行包含一个整数a,为待查找的数。输出格式如果a在数列中出现了,输出它第一次出现的位置(......
  • Python爬虫之分布式爬虫
    分布式爬虫1.详情介绍        分布式爬虫是指将一个爬虫任务分解成多个子任务,在多个机器上同时执行,从而加快数据的抓取速度和提高系统的可靠性和容错性的技术。        传统的爬虫是在单台机器上运行,一次只能处理一个URL,而分布式爬虫通过将任务分解成多个子......
  • 时光荏苒,再次找回了我的博客园账号,再次开始学习Python
    res=pd.DataFrame(columns=['name','salary'],)print(res)EmptyDataFrame 空的创建表格Columns:[name,salary]   columns代表列的开头Index:[]  index索引代表行的开头,没有指定则为空的结果如下:res.loc[0]=['jason',1]#创建索引为0的行数据name为......
  • Python卷积网络车牌识别系统(V2.0)
    博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......