pyrhon多进程操作初探

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

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

原文地址:https://www.cnblogs.com/newzol/p/8663721.html