python使用multiprocessing创建进程的方法

本文实例讲述了python使用multiprocessing创建进程的方法。分享给大家供大家参考。具体分析如下:

进程可以通过调用multiprocessing的process进行创建,下面代码创建两个进程。

[root@localhost ~]# cat twoproces.py
#!/usr/bin/env python
from multiprocessing import process
import os
def output():
print “my pid is :%d\n” % os.getpid()
print “my parent is:%d\n” % os.getppid()
def main():
p=process(target=output)
p.start()
print “i am parent %d\n” % os.getpid()
if __name__==”__main__”:
main()

运行结果如下:

[root@localhost ~]# ./twoproces.py
i am parent 7656
my pid is :7660
my parent is:7656

以下程序结果的mypid值将在两个进程中固定不变.

[root@localhost ~]# cat badprocessid.py
#!/usr/bin/env python
from multiprocessing import process
import os
def output(mypid):
print “i am child %d id :%d\n” % (os.getpid(),mypid)
def main():
mypid=os.getpid()
p=process(target=output,args=(mypid,))
print “i am parent %d\n” % os.getpid()
p.start()
if __name__==”__main__”:
main()

有与子进程并没有重设mypid,所以运行过程中mypid并没有任何改变。

下面代码将创建一个由子进程创建子进程的进程链。

[root@localhost ~]# cat simplechina.py
#!/usr/bin/env python
import os
from multiprocessing import process
def output(howmany,childpid):
info = (howmany,os.getpid(),os.getppid(),childpid)
print “i:%d process id:%d parent id%d child id %d\n” % info
def chain(howmany):
howmany = howmany-1
if howmany > 0:
p = process(target=chain,args=(howmany,))
p.start()
output(howmany,p.pid)
def main():
childpid = 0
howmany=6
p = process(target=chain,args=(howmany,))
p.start()
if __name__==”__main__”:
main()

有与主进程利用process创建子进程,而子进程又再创建子进程(也就是a->b->c-d),如此类推,知道howmany小于0结束。运行1结果如下:

[root@localhost ~]# ./simplechina.py
i:5 process id:13581 parent id13580 child id 13582
i:4 process id:13582 parent id13581 child id 13583
i:3 process id:13583 parent id13582 child id 13584
i:2 process id:13584 parent id13583 child id 13585
i:1 process id:13585 parent id13584 child id 13586

接下来如何创建一个进程扇,也就是:
a
/ \
b c
建立simplefan.py文件,代码如下:

[root@localhost ~]# cat simplefan.py
#!/usr/bin/env python
import os
from multiprocessing import process
def output(howmany,childpid):
info = (howmany,os.getpid(),os.getppid(),childpid)
print “i:%d process id:%d parent id%d child id %d\n” % info
def fan(i):
output(i,os.getpid())
def main():
plist=[]
for i in range(6):
p = process(target=fan,args=(i,))
plist.append(p)
for p in plist:
p.start()
for p in plist:
p.join()
if __name__==”__main__”:
main()

运行结果如下:

[root@localhost ~]# ./simplefan.py
i:0 process id:13594 parent id13593 child id 13594
i:2 process id:13596 parent id13593 child id 13596
i:3 process id:13597 parent id13593 child id 13597
i:1 process id:13595 parent id13593 child id 13595
i:4 process id:13598 parent id13593 child id 13598
i:5 process id:13599 parent id13593 child id 13599

除了进程id为13593的进程外,其它进程的父进程都是13593
父进程利用join方法等等所有的子进程结束。

希望本文所述对大家的python程序设计有所帮助。

Posted in 未分类