首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python的多线程threading和多进程multiprocessing

python中的多线程就是在一个进程中存在着多个线程,在线程中,所有的线程都是共享资源的,线程之间的数据通信很简单。但是python仅支持一个线程的运行,因为python中存在一个全局解释器锁GIL(global interpreter lock),正是这个锁能保证同一时刻只有一个线程在运行,所以多线程依旧像是单线程的运行。

GIL无疑就是一把对多线程有影响的全局锁,解决它对多线程的影响,不单单是释放GIL这么简单。GIL使得对象模型都是可以并发访问。GIL全局解释器锁解决多线程之间数据完整性和状态同步的问题,但是这个锁在同一时刻只有一个线程在运行,所以在多核的情况下也只能发挥出单核的性能,多线程依旧像是单线程的运行。下面用一个单线程和多线程对比实例给大家看一下结果。

执行结果:

total time of single is:0.04100227355957031

total time of multi is:0.019001245498657227

python多线程编程是为了并行运行相互独立的子任务,大幅度提高整个任务的效率,比如异步任务、运算密集型任务等。线程有开始,顺序执行和结束三个阶段。python多线程编程中常用方法有:start()方法、run()方法、join()方法、isAlive()方法、getName()方法、setName()方法、isDaemon()方法、setDaemon()方法等。

在python多线程模块主要有thread和threading,推荐大家使用threading模块,因为threading进行了大量的封装,从而不需要管理子线程和主线程之间的问题,也允许用户自己创建和管理线程。

多任务可以由多进程完成,也可以由一个进程内的多线程完成。多线程中任务有以下特点:异步的,多个并发事务,各个事务的运行顺序是不确定的、随机的、不可预测的。所以多线程编程模型复杂,容易发生冲突,必须用锁加以隔离,同时,又要小心死锁的发生。

其实python的多线程其实并不是真正的多线程,因为GIL(global interpreter lock)全局解释器锁的存在,导致python中大部分情况需要使用multiprocessing,多进程完成从单进程到并发执行的转换。

Python的多进程包multiprocessing支持子进程、通信和共享数据、执行不同形式的同步。在multiprocessing中,一个程序的执行实例就是一个进程,每一个进程都用一个Process类来表示,每一个进程提供执行程序所需的所有资源。同一个进程中的线程共享同一内存空间,但是进程之间是独立的。同一个进程中的所有线程的数据是共享的(进程通讯),进程之间的数据是独立的。

产品经理朱学敏

一名懂技术和管理的产品经理

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190213G05AAM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券