Python——进程

1.multiprocessing

multiprocessing模块就是跨平台版本的多进程模块。在Windows环境下创建进程可以使用multiprocessing模块。multiprocessing模块提供了一个Process类来代表一个进程对象。
创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例。用start()方法启动。join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
不知道为什么该代码可以在IDLE下运行不了,在PyCharm下就可以运行。

from multiprocessing import Process
import os

# 子进程要执行的代码
def run_proc(name):
    print('Run child process %s(%s).' % (name, os.getpid()))

if __name__ == '__main__':
    print('parent process %s.' % os.getpid())
    p = Process(target=run_proc, args=('test',))
    print('Child process will start...')
    p.start()
    p.join()
    print('Child process end...')

运行结果

parent process 6540.
Child process will start...
Run child process test(2468).
Child process end...

2.Pool

如果要启动大量的子进程,可以用进程池的方式批量创建子进程。

from multiprocessing import Pool
import os,time,random


# 子进程要执行的代码
def run_proc(name):
    print('Run child process %s(%s).' % (name, os.getpid()))
    start=time.time()
    time.sleep(random.random()*3)
    end=time.time()
    print('child process %s run %0.2f seconds. '%(name,(end-start)))


if __name__ == '__main__':
    print('parent process %s.' % os.getpid())
    p=Pool(5)      #这是Pool有意设计的限制,限制为5,并不是操作系统的限制,Pool的默认大小为cpu的核数。所以才会出现下面的进程5要等前面的一个进程完成才能开始
    for i in range(6):
        p.apply_async(run_proc,args=(i,))
    print('Waiting for...')
    p.close()     #调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了
    p.join()   #对Pool对象调用join()方法会等待所有子进程执行完毕
    print('All Child process end...')


运行结果

parent process 6208.
Waiting for...
Run child process 0(10512).
Run child process 1(1152).
Run child process 2(6980).
Run child process 3(9124).
Run child process 4(11588).
child process 1 run 1.72 seconds. 
Run child process 5(1152).
child process 4 run 1.93 seconds. 
child process 2 run 2.51 seconds. 
child process 3 run 2.74 seconds. 
child process 0 run 2.94 seconds. 
child process 5 run 1.31 seconds. 
All Child process end...

子进程

posted @ 2017-04-26 21:22  笨笨鸟  阅读(209)  评论(0编辑  收藏  举报