美文网首页大数据 爬虫Python AI Sql
为什么有的Python程序猿月薪过万?线程,进程,这就是效率

为什么有的Python程序猿月薪过万?线程,进程,这就是效率

作者: 1a076099f916 | 来源:发表于2018-11-28 15:00 被阅读11次

并发方式

  • 线程(Thread和Threading)

  • 多进程(Mutilprocess)

多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具(JS程序员请回避),使用多线程可以有效的利用CPU资源(Python例外)。然而多线程所带来的程序的复杂度也不可避免,尤其是对竞争资源的同步问题。

加小编Python学习群:813542856可以获取各类Python学习资料哦!

然而在python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降了,这是多么蛋疼的一件事呀!实际上使用多线程的编程模型是很困难的,程序员很容易犯错,这并不是程序员的错误,因为并行思维是反人类的,我们大多数人的思维是串行(精神分裂不讨论),而且冯诺依曼设计的计算机架构也是以顺序执行为基础的。所以如果你总是不能把你的多线程程序搞定,恭喜你,你是个思维正常的程序猿:)

为什么有的Python程序猿月薪过万?线程,进程,这就是效率

多线程

多线程其实可以简单的理解为:在你听着音乐的时候,后台还下载着电影,屏幕上放着小说,你还吃着火锅。现在科技不停的发展,时代在不停的进步,我们的CPU也越来越快,现在CPU开始抱怨了,多大点事儿,就占用了我这么长时间?其实我同时干多个活都没问题的;于是,操作系统就进入了多任务时代。

而Python中有两个模块可以来实现多线程,那就是thread和threading,前者提供了低级别的、原始的线程以及一个简单的锁,后者除了提供了前者所有的服务以外还添加了新的东西,这个我们在下面会自己详解。但是现在,thread模块已被废弃。用户可以使用threading模块代替。所以,在Python3中不能再使用thread模块了。为了兼容性,Python3将 thread重命名为 "_thread"。

  • _thread模块的使用,这里的进程Ctrl+C终止进程
image.png

threading模块的使用,threading模块在thread模块的基础上又添加了一下功能;这里的进程Ctrl+C终止进程

  1. threading.currentThread(): 返回当前的线程变量。

  2. threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。

  3. threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

image.png

现在线程多了,但是没有秩序,是不是不太好啊?就像你上学的时候排队,个子高的站后面,个子低的站前面,我们做一个优先的队列啊~那这个时候我们就需要一个模块Queue

  • Queue 模块

Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列FifoQueue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。

image.png 为什么有的Python程序猿月薪过万?线程,进程,这就是效率

多进程mutilprocess

像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多。

创建简单的进程

image.png

确定了当前的进程以后,就是给进程命名,目的是方便标识区分,跟踪

image.png

之后就是不阻挡主程序退出,自己干自己的,这个就是守护进程

image.png

之后就是终止进程,最好使用的poison pill,强制的话使用terminate()


image.png

相关文章

  • 为什么有的Python程序猿月薪过万?线程,进程,这就是效率

    并发方式 线程(Thread和Threading) 多进程(Mutilprocess) 多线程几乎是每一个程序猿在...

  • Java程序猿为何月薪过万?如今学Java发展前景怎么样?

    Java程序猿的月薪过万引来许多人羡慕嫉妒不已,有许多就是说冲着Java的百万年薪因而改行。可是Java程序猿的薪...

  • Python 多进程与多线程

    Python多线程没有多进程执行的效率高,执行多遍以后,多进程的程序会直接从缓存中取数据,只需要零点几秒,多进程都...

  • Python学习17-多线程

    查看所有Python相关学习笔记 多线程开发: 进程: 进程的概念:运行着的程序每个进程至少包含一个线程线程是操作...

  • pythone 学习知识整理

    python 的多线程、多进程学习总结 基本概念 进程 一个运行的程序称做进程 给函数的执行计时(装饰器实现) 这...

  • Python爬虫进阶 | 多线程

    一、简介 为了提高爬虫程序效率,由于python解释器GIL,导致同一进程中即使有多个线程,实际上也只会有一个线程...

  • 多进程比之多线程

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这...

  • python多线程

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这...

  • java 多线程

    进程即为程序,一个程序可以同时拥有多个操作,多个操作即为此进程的线程;线程是比进程效率更快的处理单元,且资源占有较...

  • 线程学习笔记(一)

    线程和进程区别 什么是进程,程序运行的时候会对应一个进程,进程就是处于运行的程序,进程具有并发性。什么是线程,线程...

网友评论

    本文标题:为什么有的Python程序猿月薪过万?线程,进程,这就是效率

    本文链接:https://www.haomeiwen.com/subject/mvoaqqtx.html