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)