这「python的多线程与多进程」百家号是很给力的小程序,简直逆天了。
分类:新闻资讯
开发作者:
发布时间:
更新时间:
「python的多线程与多进程」百家号_作者自评:
如何看待百家号Lite小程序热议话题「python的多线程与多进程」
最近用python给朋友的手游工作室写了一个游戏辅助程序,实现服务器里二十个模拟器的自动运行,包括账户登陆、切换、挂机、整理背包等简单操作。最初的实现方案是采取多线程,为每一个模拟器开启一个线程,主线程定期检查各子线程的状态,并进行相应处理。程序完成后测试的结果并不理想,因为python的多线程无法实现线程的并行执行,最后采取的方案是采用多进程,为每个模拟器启动独立的进程,程序运行速度得到明显提高。本文简单梳理一下python多线程与多进程的相关知识,希望对初学者有所帮助。进程与线程进程是操作系统进行资源分配的最小单元,资源包括CPU、内存、磁盘等IO设备等等,而线程是CPU调度的基本单位。举个简单的例子来帮助理解:我们电脑上同时运行的浏览器和视频播放器是两个不同的进程,进程可能包含多个子任务,这些子任务就是线程,比如视频播放器在播放视频时要同时显示图像、播放声音、显示字幕,这就是三个线程。多线程操作系统通过给不同的线程分配时间片(CPU运行时长)来调度线程,当CPU执行完一个线程的时间片后就会快速切换到下一个线程,时间片很短而且切换切速度很快以至于用户根本察觉不到。早期的计算机是单核单线程的,多个线程根据分配的时间片轮流被CPU执行,如今绝大多数计算机的CPU都是多核的,多个线程在操作系统的调度下能够被多个CPU并发执行,程序的执行速度和CPU的利用效率大大提升。绝大多数主流的编程语言都能很好地支持多线程,然而python由于GIL锁无法实现真正的多线程。GIL锁GIL是什么呢?仍然用篮球比赛的例子来帮助理解:把篮球场看作是CPU,一场篮球比赛看作是一个线程,如果只有一个篮球场,多场比赛要排队进行,就是一个简单的单核多线程的程序;如果有多块篮球场,多场比赛同时进行,就是一个简单的多核多线程的程序。然而python有着特别的规定:每场比赛必须要在裁判的监督之下才允许进行,而裁判只有一个。这样不管你有几块篮球场,同一时间只允许有一个场地进行比赛,其它场地都将被闲置,其它比赛都只能等待。多进程既然不能实现真正的多线程,python为什么能在20年的时间里发展为全世界排名前三(根据2018年12月10日TIBOE编程语言排行)的编程语言呢?其实python有很多方法能解决这一问题,比如使用多进程、C语言扩展、ctypes,本文暂为大家介绍第一种:多进程。每个进程都包含至少一个线程:主线程,每个主线程可以开启多个子线程,由于GIL锁机制的存在,每个进程里的若干个线程同一时间只能有一个被执行;但是使用多进程就可以保证多个线程被多个CPU同时执行。如果觉得不好理解,请看下面的两段代码。我分别在我的电脑上运行python多线程和多进程的代码,大家对比一下就明白了。我的CPU是i5-6400T,2.20Ghz,4核4线程。上图左边用python多线程写了一段代码,主线程加上15个子线程总共16个线程(见最左边的线程列表),每个线程都运行了一个死循环,可是CPU的使用率一直稳定在34%,接近三分之二的CPU被闲置。如果类似的代码用C、C++或Java写,CPU使用率会迅速飙升到100%,电脑运行变得非常卡甚至死机。下面将代码改成多进程,看看运行情况。修改后CPU的利用率,一直保持在100%。通过对比我们不难发现python编写多进程能更充分地利用多核CPU的性能,大大提升程序的运行速度。我们用死循环这种极端的例子只是为了对比python多线程与多进程的差别,实际编程中肯定不会这么写。总结python多线程和多进程不存在优劣之分,两者都有着各自的应用环境。线程几乎不占资源,系统开销少,切换速度快,而且同一个进程的多个线程之间能很容易地实现数据共享;而创建进程需要为它分配单独的资源,系统开销大,切换速度慢,而且不同进程之间的数据默认是不可共享的。掌握了两者各自的特点,才能在实际编程中根据任务需求采取更加适合的方案。本文从理论上对python多线程和多进程做了粗浅的介绍,希望对初学者有帮助,接下来的文章会详细为大家介绍我在使用上的心得体会和我曾踩过的坑。
该话题由百家号作者郭靖愕然「简介:每天学一点python,成为更好的自己」整理发布
更多有关python的多线程与多进程的话题讨论请关注百家号Lite小程序
「python的多线程与多进程」百家号_使用指南:
步骤1:微信扫描「python的多线程与多进程」百家号小程序码即可使用;
步骤2:微信搜索「python的多线程与多进程」百家号小程序名称即可使用;
步骤3:微信网页访问即速商店-长按识别「python的多线程与多进程」百家号小程序码即可使用。
「python的多线程与多进程」百家号_服务声明:
本服务由「python的多线程与多进程」百家号小程序开发者向微信用户提供,并对本服务信息内容、数据资料及其运营行为等的真实性、合法性及有效性承担全部责任。
"「python的多线程与多进程」百家号"由开发者"「python的多线程与多进程」百家号"原创首发于微信小程序商店shop.jisuapp.cn,转载请注明出处。
长按保存二维码,在微信app识别
共收到5条评价
5星3条
4星2条
3星0条
2星0条
1星0条
2019-06-24 02:15:38
这「python的多线程与多进程」百家号是很给力的小程序,简直逆天了。
2019-06-24 02:12:28
特别棒,该「python的多线程与多进程」百家号小程序 简单好操作 也特别实用 强烈推荐
2019-06-24 02:11:33
该「python的多线程与多进程」百家号微信小程序必须五颗星呀!
2019-06-24 02:09:20
这个「python的多线程与多进程」百家号小程序很实用,而且还不用我下载,棒!
2019-06-24 02:04:31
这个「python的多线程与多进程」百家号微信小程序功能齐全,很棒哦!