python进程(1)简单使用
作者:互联网
在python中使用进程的时候是使用的是multiprocessing库。
下面简单总结python中的进程符合创建以及使用。
1、process进程类的说明
(1) Process([group[,target[,name[,args[,kwargs]]]]])
参数说明:
- group:指定进程组,目前只能使用None
- target:进程执行目标的任务名
- name:进程名称
- args:以元组方式对执行任务进行传参
- kwargs:以字典方式给执行任务进行传参
(2) Process创建实例对象的常用方法:
- start():启动子进程的实例(创建子进程)
- join():等待子进程执行结束
- terminate():无论任务是否完成,立即终止子进程
(3) process进程实例
- 创建子进程完成跳舞任务,主进程执行唱歌任务:(注意,进程必须在main方法中启用,即在__main__中启动)
# 1、导入进程包
import multiprocessing
import time
# 跳舞任务
def dance():
for i in range(3):
print('正在跳舞中......')
time.sleep(0.3)
# 唱歌任务
def sing():
for i in range(3):
print('正在唱歌中......')
time.sleep(0.4)
# 2、实例化子进程
dance_process = multiprocessing.Process(target=dance)
if __name__ == '__main__':
# 3、启动子进程,去执行对应的任务
dance_process.start()
# 主进程执行唱歌任务
sing()
运行结果:
正在唱歌中......
正在唱歌中......
正在跳舞中......
正在跳舞中......
正在唱歌中......
正在跳舞中......
- 唱歌和跳舞任务都使用子进程来执行
# 1、导入进程包
import multiprocessing
import time
# 跳舞任务
def dance():
for i in range(3):
print('正在跳舞中......')
time.sleep(0.3)
# 唱歌任务
def sing():
for i in range(3):
print('正在唱歌中......')
time.sleep(0.4)
# 2、实例化子进程
dance_process = multiprocessing.Process(target=dance)
sing_process = multiprocessing.Process(target=sing)
if __name__ == '__main__':
# 3、启动子进程,去执行对应的任务
dance_process.start()
# 子进程执行唱歌任务
sing_process.start()
运行结果:
正在跳舞中......
正在唱歌中......
正在跳舞中......
正在唱歌中......
正在跳舞中......
正在唱歌中......
进程执行是无序的,具体哪个及产能先执行是由操作系统调度决定的。
2、获取进程的编号
(1) 获取进程编号的目的
获取进程编号的目的是为了验证主进程和子进程之间的关系,可以得知子进程是由哪一个主进程创建的。
操作步骤:获取当前进程的编号,通过该进程获取父进程的编号,如果获取到父进程的编号是当前主进程的编号,那么该子进程就是该主进程创建的。
(2) 获取当前进程的编号
- os.getpid():获取当前进程的id
- os.getppid():获取当前进程的父进程的id
- multiprocessing.current_process():获取当前进程的进程对象
# 1、导入进程包
import multiprocessing
import time
import os
# 跳舞任务
def dance():
# 获取当前dance程序进程的id
dance_process_id = os.getpid()
# 获取当前dance程序进程对象
dance_process_obj = multiprocessing.current_process()
print('dance进程的对象:%s, dance进程的id:%s' %(dance_process_obj, dance_process_id))
# 获取当前dance程序进程的父进程id
dance_process_parent_id = os.getppid()
print('dance程序进程的父进程的id:', dance_process_parent_id)
for i in range(3):
print('正在跳舞中......')
time.sleep(0.3)
# 唱歌任务
def sing():
# 获取当前sing程序进程的id
sing_process_id = os.getpid()
# 获取当前sing程序进程对象
sing_process_obj = multiprocessing.current_process()
print('sing进程的对象:%s, sing进程的id:%s' %(sing_process_obj, sing_process_id))
# 获取当前sing程序进程的父进程id
sing_process_parent_id = os.getppid()
print('sing程序进程的父进程的id:', sing_process_parent_id)
for i in range(3):
print('正在唱歌中......')
time.sleep(0.4)
# 2、实例化子进程
dance_process = multiprocessing.Process(target=dance, name="dance_process")
sing_process = multiprocessing.Process(target=sing, name="sing_process")
if __name__ == '__main__':
# 3、启动子进程,去执行对应的任务
dance_process.start()
# 子进程执行唱歌任务
sing_process.start()
# 获取当前main程序进程的id
main_process_id = os.getpid()
print('当前main程序进程的id:',main_process_id)
# 获取当前main程序进程对象
main_process_obj = multiprocessing.current_process()
print('当前main程序进程对象:',main_process_obj)
运行结果:
当前main程序进程的id: 7032
当前main程序进程对象: <_MainProcess(MainProcess, started)>
dance进程的对象:<Process(dance_process, started)>, dance进程的id:1392
dance程序进程的父进程的id: 7032
正在跳舞中......
sing进程的对象:<Process(sing_process, started)>, sing进程的id:2104
sing程序进程的父进程的id: 7032
正在唱歌中......
正在跳舞中......
正在唱歌中......
正在跳舞中......
正在唱歌中......
由结果看出,sing子程序和dance子程序都是由主程序MainProcess创建的。
**(3)**杀死指定进程
os.kill(process_id,sig):process_id为要杀死的指定进程的id,sig为操作状态:操作(第二个参数)的常用取值为:
- SIGINT 终止进程 中断进程
- SIGTERM 终止进程 软件终止信号
- SIGKILL 终止进程 杀死进程
- SIGALRM 闹钟信号
# 1、导入进程包
import multiprocessing
import time
import os
import signal
# 跳舞任务
def dance():
# 获取当前dance程序进程的id
dance_process_id = os.getpid()
# 获取当前dance程序进程对象
dance_process_obj = multiprocessing.current_process()
print('dance进程的对象:%s, dance进程的id:%s' %(dance_process_obj, dance_process_id))
# 获取当前dance程序进程的父进程id
dance_process_parent_id = os.getppid()
print('dance程序进程的父进程的id:', dance_process_parent_id)
for i in range(3):
print('正在跳舞中......')
time.sleep(0.3)
os.kill(dance_process_id, signal.SIGKILL)
# 唱歌任务
def sing():
# 获取当前sing程序进程的id
sing_process_id = os.getpid()
# 获取当前sing程序进程对象
sing_process_obj = multiprocessing.current_process()
print('sing进程的对象:%s, sing进程的id:%s' %(sing_process_obj, sing_process_id))
# 获取当前sing程序进程的父进程id
sing_process_parent_id = os.getppid()
print('sing程序进程的父进程的id:', sing_process_parent_id)
for i in range(3):
print('正在唱歌中......')
time.sleep(0.4)
# 2、实例化子进程
dance_process = multiprocessing.Process(target=dance, name="dance_process")
sing_process = multiprocessing.Process(target=sing, name="sing_process")
if __name__ == '__main__':
# 3、启动子进程,去执行对应的任务
dance_process.start()
# 子进程执行唱歌任务
sing_process.start()
# 获取当前main程序进程的id
main_process_id = os.getpid()
print('当前main程序进程的id:',main_process_id)
# 获取当前main程序进程对象
main_process_obj = multiprocessing.current_process()
print('当前main程序进程对象:',main_process_obj)
运行结果:
当前main程序进程的id: 2044
当前main程序进程对象: <_MainProcess(MainProcess, started)>
dance进程的对象:<Process(dance_process, started)>, dance进程的id:9404
sing进程的对象:<Process(sing_process, started)>, sing进程的id:10940
dance程序进程的父进程的id: 2044
正在跳舞中......
sing程序进程的父进程的id: 2044
正在唱歌中......
正在唱歌中......
正在唱歌中......
由此可以看出dance进程已经被杀死。
标签:python,......,process,dance,简单,进程,sing,id 来源: https://blog.csdn.net/time_money/article/details/120101311