概述
并发和并行的区别
并发指的是,假如单核的cpu,要同时运行多个任务,这个时候就需要不断的切换任务,只是切换的比较快,没有分辨出来。
并行,是假如是2核的cpu,有两个任务要运行,一个cpu执行一个任务,这个时候两个任务同时运行,就是并行。
可以使用多进程和多线程,完成多任务
一、多进程完成多任务
进程的创建步骤
1、导入进程包
import multiprocessing
2、通过进程类创建进程对象
进程对象 = multiprocessing.Processing(target=任务名)
参数名 说明
target 执行的目标任务名,这里指的是函数名(方法名)
name 进程名,一般不用设置
group 进程组,目前只能使用None
3、启动进程执行任务
进程对象.start()
单进程写法
import time
import multiprocessing
def sing():
for i in range(3):
print("唱歌....")
time.sleep(0.5)
def dance():
for i in range(3):
print("跳舞.....")
time.sleep(0.5)
if __name__ == '__main__':
sing()
dance()
多进程写法
import time
import multiprocessing
def sing():
for i in range(3):
print("唱歌....")
time.sleep(0.5)
def dance():
for i in range(3):
print("跳舞.....")
time.sleep(0.5)
if __name__ == '__main__':
sing_process = multiprocessing.Process(target=sing)
dance_process = multiprocessing.Process(target=dance)
sing_process.start()
dance_process.start()
二、进程执行带有参数的任务
参数名 说明
args 以元组的方式给执行的任务传参
kwargs 以字典的方式给执行任务传参
1、args 参数的使用
sing_process = multiprocessing.Process(target=sing, args=(3,))
sing_process.start()
元组的顺序,要与参数顺序一致
2、kwargs参数的使用
dance_process = multiprocessing.Process(target=dance, kwargs={"num": 3})
dance_process.start()
字典的key 要与参数一致
import time
import multiprocessing
def sing(num):
for i in range(num):
print("唱歌....")
time.sleep(0.5)
def dance(num):
for i in range(num):
print("跳舞.....")
time.sleep(0.5)
if __name__ == '__main__':
sing_process = multiprocessing.Process(target=sing, args=(3,))
dance_process = multiprocessing.Process(target=dance, kwargs={"num": 4})
sing_process.start()
dance_process.start()
三、获取进程的编号
1、获取当前进程编号
os.getpid()
import os
pid = os.getpid()
print(pid)
2、获取当前父进程编号
os.getppid()
import os
ppid = os.getppid()
print(ppid)
四、多进程的注意点
1、主进程默认会等待所有的子进程执行结束再结束,保证子进程都结束掉
import time
import multiprocessing
def work():
for i in range(10):
print("工作中")
time.sleep(0.2)
if __name__ == '__main__':
work_process = multiprocessing.Process(target=work)
work_process.start()
# 主进程失眠1秒
time.sleep(1)
print("主进程执行完成......")
# 工作中
# 工作中
# 工作中
# 主进程执行完成......
# 工作中
# 工作中
# 工作中
# 工作中
# 工作中
# 工作中
# 工作中
2、子进程设置守护主进程,一旦主进程结束,所有的子进程自动销毁
增加一行代码
work_process.daemon = True
import time
import multiprocessing
def work():
for i in range(10):
print("工作中")
time.sleep(0.2)
if __name__ == '__main__':
work_process = multiprocessing.Process(target=work)
work_process.daemon = True
work_process.start()
# 主进程失眠1秒
time.sleep(1)
print("主进程执行完成......")
# 工作中
# 工作中
# 工作中
# 工作中
# 工作中
# 主进程执行完成......
总结:
为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行。
设置守护主进程方式:子进程对象.daemon = True
最后
以上就是完美老虎为你收集整理的Python多进程的全部内容,希望文章能够帮你解决Python多进程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复