在python中使用进程的时候是使用的是multiprocessing库。
下面简单总结python中的进程符合创建以及使用。
1、process进程类的说明
(1) Process([group[,target[,name[,args[,kwargs]]]]])
参数说明:
(2) Process创建实例对象的常用方法:
(3) process进程实例
# 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) 获取当前进程的编号
# 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为操作状态:操作(第二个参数)的常用取值为:
# 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进程已经被杀死。