Python 中线程、进程对比及进程实例

一、进程介绍

进程:正在执行的程序,由程序、数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位。

程序:没有执行的代码,是一个静态的。

二、线程和进程之间的对比

由图可知:此时电脑有 9 个应用进程,但是一个进程又会对应于多个线程,可以得出结论:

进程:能够完成多任务,一台电脑上可以同时运行多个 QQ

线程:能够完成多任务,一个 QQ 中的多个聊天窗口

根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位.

使用多进程的优势:

1、拥有独立GIL:

首先由于进程中 GIL 的存在,Python 中的多线程并不能很好地发挥多核优势,一个进程中的多个线程,在同 一时刻只能有一个线程运行。而对于多进程来说,每个进程都有属于自己的 GIL,所以,在多核处理器下,多进程的运行是不会受 GIL的影响的。因此,多进 程能更好地发挥多核的优势。

2、效率高

当然,对于爬虫这种 IO 密集型任务来说,多线程和多进程影响差别并不大。对于计算密集型任务来说,Python 的多进程相比多线 程,其多核运行效率会有成倍的提升。

三、Python 实现多进程

我们先用一个实例来感受一下:

1、使用 process 类

这是一个实现多进程最基础的方式:通过创建 Process 来新建一个子进程,其中 target 参数传入方法名,args 是方法的参数,是以 元组的形式传入,其和被调用的方法 process 的参数是一一对应的。

注意:这里 args 必须要是一个元组,如果只有一个参数,那也要在元组第一个元素后面加一个逗号,如果没有逗号则 和单个元素本身没有区别,无法构成元组,导致参数传递出现问题。创建完进程之后,我们通过调用 start 方法即可启动进程了。

运行结果如下:

可以看到,我们运行了 5 个子进程,每个进程都调用了 process 方法。process 方法的 index 参数通过 Process 的 args 传入,分别是 0~4 这 5 个序号,最后打印出来,5 个子进程运行结束。

2、继承 process 类

我们首先声明了一个构造方法,这个方法接收一个 loop 参数,代表循环次数,并将其设置为全局变量。在 run方法中,又使用这 个 loop 变量循环了 loop 次并打印了当前的进程号和循环次数。

在调用时,我们用 range 方法得到了 2、3、4 三个数字,并把它们分别初始化了 MyProcess 进程,然后调用 start 方法将进程启动起 来。

注意:这里进程的执行逻辑需要在 run 方法中实现,启动进程需要调用 start 方法,调用之后 run 方法便会执行。

运行结果如下:

注意,这里的进程 pid 代表进程号,不同机器、不同时刻运行结果可能不同。

四、进程之间的通信

1、Queue-队列 先进先出

2、共享全局变量不适用于多进程编程

运行结果:

有结果可知:全局变量不共享;

五、进程池之间的通信

1、进程池引入

当需要创建的子进程数量不多时,可以直接利用 multiprocessing 中的 Process 动态生成多个进程,但是如果是上百甚至上千个目标,手动的去创建的进程的工作量巨大,此时就可以用到 multiprocessing 模块提供的 Pool 方法。

运行结果:

一个进程池只能容纳 3 个进程,执行完成才能添加新的任务,在不断的打开与释放的过程中循环往复。

六、案例:文件批量复制

操作思路:

获取要复制文件夹的名字

创建一个新的文件夹

获取文件夹里面所有待复制的文件名

创建进程池

向进程池添加任务

代码如下:

导包

定制文件复制函数

定义主函数

程序运行

运行结果如下图所示:

运行前后文件目录结构对比

运行前

运行后

以上内容就是整体大致结果了,由于 test 里面是随便粘贴的测试文件,这里就不展开演示了。

技巧|利用 Python 实现多任务进程相关推荐

  1. 技巧:利用 Python 实现多任务进程

    一.进程介绍 进程:正在执行的程序,由程序.数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位. 程序:没有执行的代码,是一个静态的. 二.线程和进程之间的对比 由图可知 ...

  2. 【Python】利用 Python 实现多任务进程

    来源:公众号[杰哥的IT之旅] 作者:阿拉斯加 ID:Jake_Internet 一.进程介绍 进程:正在执行的程序,由程序.数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基 ...

  3. 利用 Python 实现多任务进程

    作者:阿拉斯加 ID:Jake_Internet 一.进程介绍 进程:正在执行的程序,由程序.数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位. 程序:没有执行的代码, ...

  4. 怎样利用Python制作守护进程

    有时候我们的需要制作一些守护进程,如果服务器出现了什么问题,就需要重启某个软件啊之类的 那么这类守护进程怎么做呢? 请看代码 import time seconds_to_sleep = 2 * 60 ...

  5. Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略

    Python编程语言学习:for循环中常用方法经验技巧(利用enumerate函数对列表实现自带索引等)之详细攻略 目录 for循环中常用方法经验技巧 1.利用enumerate函数对列表实现for循 ...

  6. python进程池pool_python多任务--进程池Pool

    进程池Pool 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中 ...

  7. python多任务——进程基础介绍(Process)及多进程操作

    一.进程介绍 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设 ...

  8. python画超长图-利用Python画图,千变万化,各种画图技巧!

    如图所示,利用Python的turtle画了一个美国队长盾牌的标志: # 所需依赖:python3 sublime Python代码: # print 打印 print('hello world!') ...

  9. NLP实战:利用Python理解、分析和生成文本 | 赠书

    导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...

最新文章

  1. MSSQL2000+asp.net+论坛安装过程
  2. 轻量级微服务架构实践之路
  3. key设计 短信验证存redis_Redis存储Key的一种设计实现方式:模式匹配
  4. IBM收购Clearleap,提供云视频服务
  5. 对象变为指定格式的数组
  6. 牛客 牛牛选物(01背包)
  7. 学习C语言,要从入门到精通
  8. 源码 解析_最详细集合源码解析之ArrayList集合源码解析
  9. 【零基础学Java】—Java 日期时间(三十二)
  10. 转:Java NIO系列教程(一)Java NIO 概述
  11. 2019windows上安装Mac OS 10.14过程详细截图
  12. Java web开发(9)Hibernate使用_c
  13. openai-gpt_GPT-3的不道德故事:OpenAI的百万美元模型
  14. Android mc怎么和win10联机,我的世界手机版/win10版联机完美互通方法
  15. 如何快速实现一个颜色选择器
  16. 在日软件工程师的远虑近忧
  17. Linux终端不能显示表情符问题
  18. Oracle SQL_TRACE使用小结
  19. ssim算法计算图片_图像质量评估算法 SSIM(结构相似性)
  20. CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)

热门文章

  1. IntelliJ IDEA 2020.2.4款 神级超级牛逼插件推荐
  2. 字节跳动《Python高频面试题》火了,完整版 PDF 开放下载!
  3. SOTA论文也未必能被接收,谷歌科学家Eric Jang谈顶会审稿标准
  4. CVPR2020 Oral | 港中文-商汤等开源:自监督场景去遮挡
  5. 一文学会动态规划解题技巧
  6. 那些20岁不信,30岁却深信不疑的道理!
  7. Linux 背后的思想
  8. Python从入门到精通- 什么是NumPy? (上)
  9. 多个文件中的数据处理,输出自己想要是数据
  10. k近邻算法之 k值的选择