码迷,mamicode.com
首页 > 编程语言 > 详细

【Python】Python多进程练习

时间:2019-05-07 01:20:27      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:dom   code   为什么   close   睡眠   运行程序   multi   程序   运行   

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,管道通信和队列

 

【Python】Python多进程练习

标签:dom   code   为什么   close   睡眠   运行程序   multi   程序   运行   

原文地址:https://www.cnblogs.com/stanmao/p/10822975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!