【Python】--实现多进程
import multiprocessing
import time
# 1.定义好函数
# codeing
def coding():for i in range(10):print(f'正在编写第{i}行代码')time.sleep(0.2)# music
def music():for i in range(10):print(f'正在听第{i}首歌曲')time.sleep(0.2)
单任务
# 单任务--时间为4s多
if __name__ == '__main__':t1 = time.time()coding()music()t2 = time.time()print(t2-t1)
使用multiprocessing库 使用多进程
# 多任务--时间为2s多
if __name__ == '__main__':t1 = time.time()# 创建子进程p1 = multiprocessing.Process(target=coding)p2 = multiprocessing.Process(target=music)# 启动子进程p1.start()p2.start()p1.join()p2.join()t2 = time.time()print(t2 - t1)
Process进程类的说明
- 导入进程包
import multiprocessing - 通过进程类创建进程对象
进程对象 = multiprocessing.Process() - 启动进程执行任务
进程对象.start()
Process([group [, target [, name [, args [, kwargs]]]]])
参数 | 说明 |
---|---|
group | 通常设置为 None ,为将来扩展保留,目前无作用 |
target | 要在子进程中运行的函数(函数对象,而不是函数调用) |
args | 传递给 target 函数的位置参数,必须是元组,哪怕只有一个元素也要加逗号,例如 (arg1,) |
kwargs | 传递给 target 函数的关键字参数(字典) |
name | 给进程取一个名字(可选),默认是 “Process-N”,N是编号 |
daemon | 设置为 True 时,表示该进程是守护进程,主进程退出时它也会退出。必须在 start() 之前设置 |
Process创建的实例对象的常用方法:
start()
:启动子进程实例(创建子进程) 让任务执行起来 [发动机]join()
:等待子进程执行结束 ,阻塞主进程,防止子进程还没运行完,主进程结束,导致子进程结束
Process创建的实例对象的常用属性:
name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
获取进程编号
获取当前进程编号
os.getpid() 表示获取当前进程编号
获取当前父进程编号
os.getppid() 表示获取当前父进程编号
import os
import time# 1.定义好函数
# codeing
def coding(name,num):for i in range(num):print(f'{name}正在编写第{i}行代码')time.sleep(0.2)print(f'coding现在的进程是{os.getpid()}')print(f'coding的父进程是{os.getppid()}')
# music
def music(name,count):for i in range(count):print(f'{name}正在听第{i}首歌曲')time.sleep(0.2)print(f'music现在的进程是{os.getpid()}')print(f'music的父进程是{os.getppid()}')# 多进程---时间为2s多
import multiprocessing
if __name__ == '__main__':t1 = time.time()# 创建子进程p1 = multiprocessing.Process(target=coding,name='a',args=('浩浩',5))p2 = multiprocessing.Process(target=music,name='b',kwargs={'name':'浩浩','count':8})# 启动子进程p1.start()p2.start()p1.join()p2.join()t2 = time.time()print(t2 - t1)