更多课程 选择中心


Python培训

400-996-5531

python多进程操作初探


python多进程操作初探

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....

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:学习人工智能,你少不了的Python书单
下一篇:2018年,我最想学的编程语言是Python

Python从入门到项目实战训练营开课啦!

Python语言为什么这么受人欢迎?看完这个你就知道了!

学Python去达内教育怎么样?

达内Python培训免费训练营开班啦

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省