python的multiprocessing模块
'''
multiprocessing模块创建进程
1.编写子进程执行函数
2.创建进程对象
3.启动进程
4.回收进程
'''
import multiprocessing as mp
from time import sleep
#全局变量,子进程完全copy父进程空间代码段,也能使用
a = 1
#子进程函数
def fun():
print('开始一个进程')
sleep(3)
#声明使用全局变量a
global a
print('a:',a)
#在函数内部修改全局变量a
a = 10000
print('进程结束')
#创建进程对象
p = mp.Process(target=fun)
#启动进程(此时子进程才真正创建)
p .start()
#回收进程
p.join()
print('a = ',a) #打印结果 a = 1,因为子进程只执行子进程函数部分,这部分由父进程执行,
#且父进程和子进程代码空间相互独立,子进程修改全局变量不影响父进程中变量
tips:
这是python自己封装的进程模块,可在各个操作系统下使用(可移植性好)
在这个方法中,所有的事情可以分配给各个子进程去做,父进程专门用于创建子进程和回收子进程
import multiprocessing as mp
from time import sleep
import os
def th1():
sleep(3)
print(‘吃饭')
print(os.getppid(),'--',os.getpid())
def th1():
sleep(2)
print('睡觉')
print('os.getppid(),'--',os.getpid())
def th3():
sleep(4)
print('打豆豆')
print(os.getppid(),'--',os.getpid())
#存放所有子进程函数
thing = [th1,th2,th3]
#存储进程对象
jobs = []
for th in things:
p = Process(target=th)
#因为join()不能写在for循环内部(会造成每个进程的阻塞),需通过容器存放到外边单独回收
jobs.append(p)
#同时创建多个子进程并执行,子进程的执行完全看谁先抢占到时间片,
#他们打印出的os.getppi()相同(他们拥有相同父进程)
p.start()
#回收子进程
for i in jobs:
i.join()