Python的多进程

套路1:os.fork()

先敲段代码:

#!/usr/bin/env python3

import os

os.fork()
print('1111111111')

执行结果:

1111111111
1111111111
  • fork函数一旦运行就会生出一条新的进程,2个进程一起执行导致输出了2行。

再敲段代码:

#!/usr/bin/env python3

import os
import time res = os.fork()
print('res == %d'%res)
if res == 0:
print('我是子进程,我的pid是:%d,我的父进程id是:%d'%(os.getpid(),os.getppid()))
else:
print('我是父进程,我的pid是:%d'%os.getpid())

执行结果:

res == 105297
我是父进程,我的pid是:105296
res == 0
我是子进程,我的pid是:105297,我的父进程id是:105296
  • fork()运行时,会有2个返回值,返回值为大于0时,此进程为父进程,且返回的数字为子进程的PID;当返回值为0时,此进程为子进程。
  • 注意:父进程结束时,子进程并不会随父进程立刻结束。同样,父进程不会等待子进程执行完。
  • 注意:os.fork()无法在windows上运行。

套路2:multiprocessing.Process

先敲段代码,来创建一个进程:


#!/usr/bin/env python3 from multiprocessing import Process
import time def A():
while True:
print('正在调用函数')
time.sleep(1) p = Process(target = A) #创建进程对象,并指定进程将来要执行的函数.
p.start() #启动进程.

执行结果:

正在调用函数
正在调用函数
正在调用函数
......

再敲段代码,实现多进程同步执行:


#!/usr/bin/env python3
import time
from multiprocessing import Process def A(num):
while True:
print('正在调用函数%d'%num)
time.sleep(1) for i in range(2):
p = Process(target = A, args = (i,)) #创建进程对象,并指定进程将来要执行的函数.
p.start() #启动进程. exit()

执行结果:

正在调用函数1
正在调用函数2
正在调用函数1
正在调用函数2
...
  • 注意,Process创建的进程必须执行完,主程序才会结束,用exit()也不能强退。

套路3:multiprocessing.Process的run()方法

上代码


#!/usr/bin/env python3 import os
import time
from multiprocessing import Process class NewProcess(Process): #继承Process类创建一个新类
def __init__(self,num):
self.num = num
super().__init__() def run(self): #重写Process类中的run方法.
while True:
print('我是进程%d,我的pid是:%d'%(self.num,os.getpid()))
time.sleep(1) for i in range(2):
p = NewProcess(i)
p.start()

执行结果:

我是进程0,我的pid是:105653
我是进程1,我的pid是:105654
我是进程0,我的pid是:105653
我是进程1,我的pid是:105654
我是进程0,我的pid是:105653
我是进程1,我的pid是:105654
...
  • 当不给Process指定target时,会默认调用Process类里的run()方法。这和指定target效果是一样的,只是将函数封装进类之后便于理解和调用。

套路4:multiprocessing.Pool 进程池


#!/usr/bin/env python3 import time
from multiprocessing import Pool def A():
for i in range(5):
print(i)
time.sleep(1) pool = Pool(2) #定义进程池大小
for i in range(5):
pool.apply_async(A) #使用非阻塞方式调用func,阻塞是apply() pool.close() #关闭Pool,使其不再接受新的任务
pool.join() #主进程阻塞,等待子进程的退出
  • 对Pool对象调用join()方法会等待所有子进程执行完毕。调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。
  • Pool.terminate():一旦运行到此步,不管任务是否完成,立即终止。

Python中的多进程:fork和multiprocessing的更多相关文章

  1. Python中使用多进程来实现并行处理的方法小结

    进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和 ...

  2. 聊聊Python中的多进程和多线程

    今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...

  3. 深入浅析python中的多进程、多线程、协程

    深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...

  4. multiprocessing.Process() ----------python中的多进程

    python 当中 使用封装好的 multiprocessing 为我们实现创建多进程任务. 1 Process()方法创建子进程 使用multiprocessing.Process() 方法产生一个 ...

  5. 关于python中的多进程模块multiprocessing

    python中的multiprocessing是一个多进程管理包,主要作用也就是提供多进程,而不是多线程,在其中用的比较多估计也就是Process和Pipe两个类,如下代码所示: #!/usr/bin ...

  6. Python中的多进程、多线程和协程

    本文中的内容来自我的笔记.撰写过程中参考了胡俊峰老师<Python程序设计与数据科学导论>课程的内容. 并发处理:多进程和多线程 前置 概念: 并发:一段时间内同时推进多个任务,但不一定要 ...

  7. 学习笔记--python中使用多进程、多线程加速文本预处理

    一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...

  8. python中的多进程与多线程(二)

    1.使用多线程可以有效利用CPU资源,线程享有相同的地址空间和内存,这些线程如果同时读写变量,导致互相干扰,就会产生并发问题,为了避免并发问题,绝不能让多个线程读取或写入相同的变量,因此python中 ...

  9. python中的多进程处理

    转载于:http://blog.csdn.net/jj_liuxin/article/details/3564365 帮助文档见https://docs.python.org/2.7/library/ ...

随机推荐

  1. c# 深拷贝与浅拷贝的区别分析及实例

    浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用. 深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的. 深拷贝是指源对象与拷贝对象互相独 ...

  2. WPF 与设备无关的单位

    WPF从发布之日起,一直将“分辨率无关(resolution independence)”作为其亮点,声称使用WPF制作的用户界面在轻巧的Ultra-Mobile PC的屏幕上和在50英寸的电视机上都 ...

  3. emqtt新版升级一些事项和操作

    注解 Erlang/OTP R19依赖lksctp-tools库 yum install lksctp-tools 控制台地址: http://127.0.0.1:18083,默认用户: admin, ...

  4. mongo在centos与windows上部署与配置,及远程连接mongo与数据用户和角色分配

    1.下载mongodb社区版: windows 安装包安装: https://www.mongodb.com/download-center#community(mongo下载中心) 配置环境变量 控 ...

  5. 【BZOJ2287】消失之物 [分治][DP]

    消失之物 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description ftiasch 有 N 个物品, ...

  6. 洛谷P2868 [USACO07DEC]观光奶牛 Sightseeing Cows

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

  7. 【BZOJ】1914: [Usaco2010 OPen]Triangle Counting 数三角形

    [题意]给定坐标系上n个点,求能构成的包含原点的三角形个数,n<=10^5. [算法]极角排序 [题解]补集思想,三角形个数为C(n,3)-不含原点三角形. 将所有点极角排序. 对于一个点和原点 ...

  8. UIView显示时遮挡导航栏的方法

    [self.navigationController.view:addSubview];

  9. 【HMOI】小C的填数游戏 DP+线段树维护

    [题目描述] 一个长为n的序列,每个元素有一个a[i],b[i],a[i]为0||1,每个点和他相邻的两个点分别有两条边,权值为cost1[i],cost2[i],对于每个区间l,r,我们可以给每一个 ...

  10. js_layer弹窗的使用和总结

    2018-04-10 一张呈现给用户的网页,会有很多种交互,比如连不上网络,用户点击按钮时向后台请求数据不成功等等.像这些情况,用户是看不见的, 要给用户更好的体验,在特定的时间,给客户反馈内容.实时 ...