linux系统中提供了fork函数进行进程的创建,这个接口在函数返回上比较特殊,有两个返回值,一个是子进程返回值为0,一个是父进程返回值,值大于0,表是子进程的ID.如果小于0.则表示接口出错.

python做为一个跨平台的语言,在os包中也提供了fork接口,并且沿袭了linux系统中fork接口的传统,接口有两个返回值,含义和linux系统中相似.具体使用如下:
 
注意事项:多进程在win系统中可能会报错,因为win系统中没有fork接口,所以在学习python的时候还是推荐使用linux或者mac系统,mac系统为上选.
 
一、使用os.fork
#!/usr/bin/python
#coding:utf-8
import os print "proess id is %d" % os.getpid() p = os.fork()
if(p==0):
print "this is a child process"
elif p>0:
print "this is a pp proccess %d" % p

运行结果:

proess id is 27048

this is a pp proccess 27053

this is a child process

二、使用process

Process在multiproccessing包中,功能是创建进程,包含的方法主要有:is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程
#!/usr/bin/python
#coding:utf-8
import os
from multiprocessing import Process def domyprocess(msg):
print 'process id is %d ' % os.getpid()
return if __name__ == '__main__':
print 'paraent proccess id %s' % os.getpid()
t1 = Process(target=domyprocess,args=('hello',))
t1.start()
t1.join()
t2 = Process(target=domyprocess,args=('world',))
t2.start()
t2.join()

运行结果:

paraent proccess id 27616

process id is 27621

process id is 27622

三、进程池pool

pool提供了可以创建多个进程的功能,默认情况下,pool创建的进程数和计算机的CPU核数相等.正式因为这个原因,也是我们的例子里面为什么没有5个进程同时运行,而是先运行了4个,有一个结束后,才启动了第5个进程.
如果想要指定进程数,可以在使用的时候指定进程池中的进程数.如:pool(10)
#!/usr/bin/python
#coding:utf-8
import os, time, random
from multiprocessing import Pool def domyprocess(msg):
print '%s process id is %d ' % (msg,os.getpid())
begin = time.time()
time.sleep(random.random()*3)
end = time.time()
print '%d run %d seconds' % (os.getpid(),end-begin)
return if __name__ == '__main__':
print 'paraent proccess id %s' % os.getpid()
p=Pool();
for i in range(5):
p.apply_async(domyprocess,args=(1,))
print 'wait process to do....'
p.close()
p.join()
print 'process are run end....'

运行结果:

paraent proccess id 28191

wait process to do....

1 process id is 28197

1 process id is 28199

1 process id is 28198

1 process id is 28200

28197 run 0 seconds

1 process id is 28197

28200 run 1 seconds

28198 run 2 seconds

28199 run 2 seconds

28197 run 1 seconds

process are run end....

学习永无止境,我将继续前行

pyrhon多进程操作初探的更多相关文章

  1. Python多进程操作同一个文件,文件锁问题

    最近工作当中做了一个项目,这个项目主要是操作文件的. 在操作耗时操作的时候,我们一般采用多线程或者多进程.在开发中,如果多个线程需要对文件进行读写操作,就需要用到线程锁或者是文件锁. 使用fcntl ...

  2. 多进程操作-进程锁multiprocess.Lock的使用

    多进程操作-进程锁multiprocess.Lock的使用 ​ 通过之前的Process模块的学习,我们实现了并发编程,虽然更加充分地利用了IO资源,但是也有缺陷:当多个进程共用一份数据资源的时候,就 ...

  3. swoole多进程操作

    多个任务同时执行 将顺序执行的任务,转化为并行执行(任务在逻辑上可以并行执行) 比如,我们要对已知的用户数据进行判断,是否需要发送邮件和短信,如果需要发送则发送. 不使用多进程时,我们首先判断是否发送 ...

  4. C#对图片文件的压缩、裁剪操作初探

    在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...

  5. python 多进程操作

    由于python 多线程是无法在多核上发挥优势的,所以才用多进程的方式来折中将这个问题解决. from multiprocessing import Pool import os def f(x): ...

  6. ADF中VO的删除操作初探

    在ADF的VO中,真实提交更改是在commit 方法执行之后,如以下增加操作 EntityDefImpl departmentEODef = DepartmentEOImpl. getDefiniti ...

  7. Java中的多线程操作初探

    问题引出: 说是java,其实还是在做android的时候遇到的问题,在android 4.0以后,访问网络必须在新线程中实现,所以才会遇到这个问题.只是为了方面说明问题,才新建一个java项目.在m ...

  8. 多进程操作-进程队列multiprocess.Queue的使用

    一.ipc机制 进程通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁 queue 下面拿代码来实现Queue如何使用: 案例一: from multiprocessing import Q ...

  9. android:process为耗资源操作指定一个新进程

    当有一些耗费内存比较多的操作时,可以通过android:process指定一个新的进程.保证程序运行. 例如: 一个后台长期运行的service: <service android:name=& ...

随机推荐

  1. linux之x86裁剪移植---字符界面sdl开发入门

    linux下有没有TurboC2.0那样的画点.线.圆的图形函数库,有没有grapihcs.h,或者与之相对应或相似的函数库是什么?有没有DirectX这样的游戏开发库?SDL就是其中之一. SDL( ...

  2. document.forms[].submit()

    document.forms['exportServlet'].submit(); (1)document.forms:表示获取当前页面的所有表单 (2)document.forms[0]:表示获取当 ...

  3. Excel 2010去掉网格线

    怎么去掉Excel中的网格线? 具体错误步骤如下: 1.新建excel文件,双击打开文件 2.打开视图 3.取消勾选"网格线"

  4. Java和Flex整合报错(一)

    1.错误描述 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(Def ...

  5. Unity开发之存档和读档的三种实现方式

    此文内容源自siki学院视频,仅供学习!视频链接地址:http://www.sikiedu.com/course/129 工程使用Unity 2017.3.0f3 (64-bit) 老司机读博客,了解 ...

  6. python之文件读写详解

    打开文件 函数open() 参数说明: file:文件路径 mode: 文件的读写方式,默认'r',只读方式: buffering:设置缓冲策略,0用于二进制文件,1为行缓冲,用于文本模式:默认二进制 ...

  7. 关于省市联动的bug

    一,问题描述 1.1,原来的思路 1.1.1,初始化加载省份 $.ajax({ 'type' : 'POST', 'dataType' : 'json', 'url' : '${rc.contextP ...

  8. 【BZOJ3160】万径人踪灭(FFT,Manacher)

    [BZOJ3160]万径人踪灭(FFT,Manacher) 题面 BZOJ 题解 很容易想到就是满足条件的子序列个数减去回文子串的个数吧... 至于满足条件的子序列 我们可以依次枚举对称轴 如果知道关 ...

  9. 【Luogu1345】周游加拿大(动态规划)

    [Luogu1345]周游加拿大(动态规划) 题面 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边 ...

  10. FFT && 复数重载

    复数重载 与 FFT 1.复数重载: 重载了复数的运算,即重载了复数的加减乘以及赋初值. struct Complex{ //复数的重载 double r,i; IL Complex(){r = 0; ...