PythonPython多进程练习
Posted stanmao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PythonPython多进程练习相关的知识,希望对你有一定的参考价值。
1,进程启动
通过Process方法启动,通过下面的代码执行结果,可以发现,开启的进程与WHILE循环语句会同时进行。
为什么呢?因为都是启动了进程在运行程序。
from time import sleep from multiprocessing import Process def catSound(): while True: print("喵~~") sleep(1) if __name__ == ‘__main__‘: createProcess = Process(target=catSound) createProcess.start() while True: print("吱吱~") sleep(1.2)
2,传递参数
通过kwargs方法,传递参数,注意key值需要与函数中的位置参数一致。
from multiprocessing import Process def catchMouse(catName, mouseName): print("%s 抓到了 %s" % (catName, mouseName)) if __name__ == ‘__main__‘: processCatchMouse = Process(target=catchMouse, kwargs={"catName": "Tom", "mouseName": "Jack"}) processCatchMouse.start()
3,进程与进程之间的关系
from time import sleep from multiprocessing import Process import os def dogSound(): print("我的编号是: %s" % os.getpid()) sleep(1) print("汪?") if __name__==‘__main__‘: print("大狗:我的编号是%s 你的是多少?" % os.getpid()) dogSoundProcess = Process(target=dogSound) dogSoundProcess.start()
# 加上join后,就会等待子进程执行完毕后再执行父进程,否则会像上面的例子一样并行执行。 dogSoundProcess.join() print("完毕")
注意:一般进程之间的变量是不会共享的,但是线程会。但是有一些包,提供了进程变量共享的功能。这个后续再练习
4,进程池
使用multiprocessing.pool中的Pool作为池子
通过apply_async方法把进程加入池子中,但是调用join方法前,需要先调用close方法。
import os import time from multiprocessing.pool import Pool import random def childProcess(process_number): print("进程编号:%d, 当前进程ID: %d" % (process_number, os.getpid())) startTime = time.time() time.sleep(random.randrange(5, 10, 2)) endTime = time.time() print("进程编号:%d, 结束进程ID: %d 睡眠时间: %s" % (process_number, os.getpid(),(endTime-startTime))) if __name__ == ‘__main__‘: print("父进程id: %s" % os.getpid()) processPool = Pool(3) for i in range(9): processPool.apply_async(func=childProcess, args=(i,)) processPool.close() processPool.join() print("父进程结束: %d " % (os.getpid()))
5,管道通信和队列
以上是关于PythonPython多进程练习的主要内容,如果未能解决你的问题,请参考以下文章