python进程(1)简单使用

2021/9/5 7:07:25

本文主要是介绍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进程(1)简单使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程