Python线程池与进程池

本文介绍了Python中的线程池与进程池,包括它们的使用、方法大全、期程对象及其作用,以及如何获取期程对象的返回结果。文章还探讨了在进程池中实现数据共享的方法,强调了回调函数在异步提交中的重要性。
摘要由CSDN通过智能技术生成

Python线程池与进程池

前言

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

前面我们已经将线程并发编程与进程并行编程全部摸了个透,其实我第一次学习他们的时候感觉非常困难甚至是吃力。因为概念实在是太多了,各种锁,数据共享同步,各种方法等等让人十分头痛。所以这边要告诉你一个好消息,前面的所有学习的知识点其实都是为本章知识点做铺垫,在学习了本章节的内容后关于如何使用多线程并发与多进程并行就采取本章节中介绍的方式即可。

这里要介绍一点与之前内容不同的地方 ,即如果使用队列进行由进程池创建的进程之间数据共享的话不管是 multiprocessing 模块下的 Queue 还是 queue 模块下的 Queue 都不能为进程池中所创建的进程进行数据共享,我们需要用到另一个队列即 中的 。 当然这个我也会在下面介绍到。那么开始学习吧!

  官方文档

执行器

最早期的Python2中是没有线程池这一概念的,只有进程池。直到Python3的出现才引入了线程池,其实关于他们的使用都是非常简单,而且接口也是高度统一甚至说一模一样的。 而线程池与进程池的作用即是为了让我们能够更加便捷的管理线程或进程。

我们先说一下,如果需要使用线程池或进程池,需要导入模块 concurrent.futures 。

from concurrent.futures import ThreadPoolExecutor # 线程池执行器

from concurrent.futures import ProcessPoolExecutor # 进程池执行器

这里介绍一下,关于线程池或者进程池创建出的线程与进程与我们使用 multiprocessing 模块或者 threading 模块中创建的线程或进程有什么区别。我们以多线程为例:

import threading

def task():
    ident = threading.get_ident()
    print(ident)
    # 销毁当前执行任务的线程

if __name__ == '__main__':

    for i in range(10):
        t1 = threading.Thread(target=task,)  # 领任务
        t1.start()  # 等待CPU调度,而不是立即执行  # 执行

# ==== 执行结果 ==== Ps:可以看到每个线程的id号都不一样,这也印证了图上说的。

"""
10392
12068
5708
13864
2604
7196
7324
9728
9664
472
"""
import threading
from concurrent.futures import ThreadPoolExecutor  # 线程池执行器

def task():
    ident = threading.get_ident()
    print(ident)
    # 结束任务,不销毁当前执行任务的线程,直到所有任务都执行完毕。

if __name__ == '__main__':
    pool = ThreadPoolExecutor(max_workers=2)  # 这里代表有2个线程可以领取任务
    for i in range(10):
        pool.submit(task)  # 执行器启动任务,将这些任务给2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值