Python中的多进程:fork和multiprocessing
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的更多相关文章
- Python中使用多进程来实现并行处理的方法小结
进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和 ...
- 聊聊Python中的多进程和多线程
今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...
- 深入浅析python中的多进程、多线程、协程
深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...
- multiprocessing.Process() ----------python中的多进程
python 当中 使用封装好的 multiprocessing 为我们实现创建多进程任务. 1 Process()方法创建子进程 使用multiprocessing.Process() 方法产生一个 ...
- 关于python中的多进程模块multiprocessing
python中的multiprocessing是一个多进程管理包,主要作用也就是提供多进程,而不是多线程,在其中用的比较多估计也就是Process和Pipe两个类,如下代码所示: #!/usr/bin ...
- Python中的多进程、多线程和协程
本文中的内容来自我的笔记.撰写过程中参考了胡俊峰老师<Python程序设计与数据科学导论>课程的内容. 并发处理:多进程和多线程 前置 概念: 并发:一段时间内同时推进多个任务,但不一定要 ...
- 学习笔记--python中使用多进程、多线程加速文本预处理
一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...
- python中的多进程与多线程(二)
1.使用多线程可以有效利用CPU资源,线程享有相同的地址空间和内存,这些线程如果同时读写变量,导致互相干扰,就会产生并发问题,为了避免并发问题,绝不能让多个线程读取或写入相同的变量,因此python中 ...
- python中的多进程处理
转载于:http://blog.csdn.net/jj_liuxin/article/details/3564365 帮助文档见https://docs.python.org/2.7/library/ ...
随机推荐
- robots.txt使用和优化技巧
一.利于网站优化的robots.txt使用技巧 1.在线建站提供方便之路.当我们将域名解析到服务器,可以访问站点了,可是这个时候站点还没有布局好,meta标签还一塌糊涂.乳沟此时的站点被 搜索引擎蜘蛛 ...
- Weblogic 9.2 启动时报错 javax.xml.namespace.QName
启动Weblogic 时会报错.javax.xml.namespace.QName; local class incompatible: stream classdesc serialVersionU ...
- HDU 5868 Different Circle Permutation Burnside引理+矩阵快速幂+逆元
题意:有N个座位,人可以选座位,但选的座位不能相邻,且旋转不同构的坐法有几种.如4个座位有3种做法.\( 1≤N≤1000000000 (10^9) \). 题解:首先考虑座位不相邻的选法问题,如果不 ...
- LightOJ 1140 计数/数位DP 入门
题意: 给出a,b求区间a,b内写下过多少个零 题解:计数问题一般都会牵扯到数位DP,DP我写的少,这道当作入门了,DFS写法有固定的模板可套用 dp[p][count] 代表在p位 且前面出现过co ...
- cookie与session的区别与应用
通常我们所说的浏览器自动保存密码,下次不用登陆,提示一次就不再出现的内容,大部分通过cookie或者session来实现的. cookie的概念 cookie是浏览器(User Agent)访问一些网 ...
- 基本控件文档-UIKit结构图---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 UIKit结构图 //转载请注明出处--本文永久链接:http://www.cnbl ...
- SCU 1029 Humble Numbers (打表处理)
题目链接 题意:素因子中只有2 3 5 7的数称为谦逊的数,1也是谦逊的数,题目中已经给出了前20个谦逊的数.给定数字n,按格式输出第n个谦逊的数. 题解:打表即可,注意打表的技巧就行了. ps:这道 ...
- 小程序var that=this
小程序的js函数中,一般第一句就是var that=this,那么此语句的必要性是什么呢?下面用一段代码来解释这个问题 Page({ //页面的初始数据 loadUsers: function () ...
- Android控件——TextView,EditText
TextView: 显示文本控件 EditText 输入文本框 1.TextView常用属性:
- vim 以16进制进行文件编辑
用 vim中二进制文件的编辑是先通过外部程序xxd来把文件dump成其二进制的文本形式,然后就可以按通常的编辑方式对文件进行编辑,编辑完成后再用xxd 转化为原来的形式即可. 可分如下几步进行: (1 ...