Process模块是一个创建进程的模块,使用这个模块,就可以完成进程的创建
1. 导入进程包
import multiprocessing
2. 通过进程类创建进程对象
进程对象 = multiprocessing.Process()
# 进程类中参数的介绍及注意点:
# target:子进程要执行的目标任务名,这里指的是函数名(方法名)。
# args:以元组的方式给执行的目标任务传参,并且元组方式传参一定要和目标任务形参的顺序保持一致。
# kwargs:以字典的方式给执行的目标任务传参,字典方式传参字典中的key一定要和目标任务形参名保持一致,顺序不做要求。
# name:子进程名称,一般不用设置。
# group:进程组,目前使用默认值None。
3. 启动进程执行目标任务
进程对象.start()
实例:
import multiprocessing
import time
def dance(num1):
"""跳舞"""
for i in range(num1):
time.sleep(0.5) # 强制等待,程序阻塞0.5秒,使多进程执行效果更加的直观。
print('The beauty is dancing')
def music(num2):
"""听歌"""
for i in range(num2):
time.sleep(0.5) # 强制等待,程序阻塞0.5秒,使多进程执行效果更加的直观。
print('listen to music')
if __name__ == '__main__':
# 通过进程类创建进程对象
dance_process = multiprocessing.Process(target=dance, args=(3,))
music_process = multiprocessing.Process(target=music, kwargs={"num2": 3})
# 启动子进程
dance_process.start()
music_process.start()
运行结果:
listen to music The beauty is dancing listen to music The beauty is dancing listen to music The beauty is dancing
注意:多个进程同时执行的顺序是随机的,不根据执行的顺序来。
进程之间不共享全局变量:import multiprocessing
# 定义全局变量
gal_list = []
def write_data():
"""向全局变量添加数据"""
for i in range(6):
gal_list.append(i)
print("添加了:", i)
print("数据添加完成之后的列表:", gal_list)
def read_data():
"""读全局变量列表中的数据"""
print("另一个子进程直接读取全局列表的内容:", gal_list)
if __name__ == '__main__':
# 创建添加数据的子进程
write_process = multiprocessing.Process(target=write_data)
# 创建读取数据的子进程
read_process = multiprocessing.Process(target=read_data)
# 启动添加数据的子进程
write_process.start()
write_process.join() # 阻塞等待,等待写数据的子进程执行完毕之后解阻塞。
# 启动读取数据的子进程
read_process.start()
执行结果:
添加了: 0 添加了: 1 添加了: 2 添加了: 3 添加了: 4 添加了: 5 数据添加完成之后的列表: [0, 1, 2, 3, 4, 5] 另一个子进程直接读取全局列表的内容:: []进程之间不共享全局变量的原因:
进程之间不共享全局变量是因为创建子进程的时候实际上是会重新划分一片新的内存空间,并且对主进程资源进行拷贝,也就是说子进程相当于主进程的儿子,但是爸爸是爸爸,儿子是儿子,他们自己操作的数据是不共享的,也就是上面的实列中,虽然打印的都是gal_list这个列表的值,但是不同的进程实际上都是操作的不同的对象,只不过它们名字相同而已。
文章最后:感谢大家的关注,还是那句话———人帅自有天帮
7️⃣0️⃣7️⃣6️⃣年8️⃣月7️⃣日0️⃣8️⃣点5️⃣分,亲亲数字连起来去Q➕一下,有笔记哦!



