python multiprocessing 多进程

1 获取进程id
当我们运行py文件时,该程序的运行就是一个进程 ,如果在该进程中又创建了其他进程,那么该进程就是主进程,创建的其他进程就是子进程。
下面我们通过通过os库中的方法,打印当前进程和父进程的id来验证这一关系。

os.getpid() 获取当前进程id
os.getppid() 获取父进程id

二、多进程的实现
进程的创建步骤
1、导入进程包

import multiprocessing
2、通过进程类创建进程对象

进程对象 = multiprocessing.Process(target=*)
此处target的值可以是函数名称

3、启动进程执行任务

进程对象.start()
看代码示例

import multiprocessing
import time
def drink():
for i in range(3):
print("喝汤……")
time.sleep(1)

def eat():
for i in range(3):
print("吃饭……")
time.sleep(1)

if __name__ == '__main__':
#target:指定函数名
drink_process = multiprocessing.Process(target=drink)
eat_process = multiprocessing.Process(target=eat)

drink_process.start()
eat_process.start()
运行结果

 

可以看到喝汤和吃饭交叉进行

三、带参多进程
这地方用到的是args和kwargs,其中args是使用元素组的方式给指定任务传参,kwargs是使用字典方式给指定任务传参。

args使用方式

进程对象 = multiprocessing.Process(target=*,args=(*,))
此处注意,若只有一个元素,那个逗号也是不可以省略的。

kwargs使用方式

进程对象 = multiprocessing.Process(target=*,kwargs={"变量名": 变量值})
还是以上面吃饭喝汤为例子写代码

import time
import multiprocessing


def eat(num,name):
for i in range(num):
print(name+"吃一口……")
time.sleep(1)


def drink(num,name):
for i in range(num):
print(name+"喝一口……")
time.sleep(1)


if __name__ == '__main__':
# target:指定执行的函数名
# args:使用元组方式给指定任务传参
# kwargs:使用字典方式给指定任务传参
eat_process = multiprocessing.Process(target=eat,args=(3,"giao"))
drink_process = multiprocessing.Process(target=drink,kwargs={"num": 4,"name":"giao"})

eat_process.start()
drink_process.start()
执行结果

 

import multiprocessing
import time
import os

print(os.getpid(),os.getppid())

def eat(name,num):
    for i in range(num):
        print(f'{name}吃了一口米饭。。。',os.getpid(),os.getppid(),multiprocessing.Process())
        info_t = "my name \tis Neo"
        print("t", info_t)
        time.sleep(1)


def drink(name,num):
    for i in range(num):
        print(f'{name}喝了一口二锅头。。。',os.getpid(),os.getppid(),multiprocessing.Process())
        time.sleep(1)


if __name__ == '__main__':
    eat_process = multiprocessing.Process(target=eat,kwargs={"name":"张三","num":10})
    drink_process = multiprocessing.Process(target=drink,kwargs={"name":"张三","num":10})

    eat_process.start()
    drink_process.start()

 

posted @ 2022-11-16 14:52  chenwandong  阅读(189)  评论(0编辑  收藏  举报