python高级编程之进程

https://blog.csdn.net/weixin_45912307/article/details/109079998

1. 进程概念

一个正在运行的程序或软件就是一个进程,是操作系统进行资源分配的基本单位
一个程序运行后至少有一个进程,一个进程默认有一个线程,线程依赖进程。

2. 进程类语法

Process([group [, target [, name [, args [, kwargs]]]]])

    group:指定进程组,目前只能使用None
    target:执行的目标任务名
    name:进程名字
    args:以元组方式给执行任务传参
    kwargs:以字典方式给执行任务传参

Process创建的实例对象的常用方法:

    start():启动子进程实例(创建子进程)
    join():等待子进程执行结束
    terminate():不管任务是否完成,立即终止子进程

Process创建的实例对象的常用属性:

name:当前进程的别名,默认为Process-N,N为从1开始递增的整数 

2.进程基本使用

# 1. 导入进程包
import multiprocessing
# 2. 创建子进程并制定执行的任务
sub_process = multiprocessing.Process(target=任务名)
# 3. 启动进程执行任务
sub_process.start()

3. 解决:主进程退出子进程销毁

import multiprocessing
import time


def task():
    while True:
        print('任务执行中...')
        time.sleep(0.1)

# 标准python写法,直接执行的模块,需加上判断是否是主模块代码
if __name__ == '__main__':
    # 创建子进程
    sub_process = multiprocessing.Process(target=task)
    sub_process.daemon = True # 法1:子进程守护主进程
    sub_process.start()

    # 主进程延时0.5s
    # 退出主进程之前,先让子进程进行销毁
    time.sleep(0.5)
    sub_process.terminate()
    print('退出主进程')

# 结论:主进程会等待子进程完成后程序再退出
# 解决:主进程退出子进程销毁
# 1. 让子进程设置为守护主进程,主进程退出子进程销毁,子进程依赖主进程
# 2. 让主进程退出之前先让让子进程销毁

4. 多进程

# 1. 导入进程包
import multiprocessing

# 任务1
# task1
def task1():
    for i in range(3):
        print('do task1...')

# 任务2
def task2():
    for i in range(5):
        print('deal task2')

# 2. 创建子线程(自己动手创建的过程称为子线程,在__init__文件中已经导入的Process类
task1_process = multiprocessing.Process(target=task1)
task2_process = multiprocessing.Process(target=task2)

# 3 .启动进程执行对应的任务
task1_process.start()
# 当前让主进程等待task1(任务1)的进程执行完成后代码再往下执行
task1_process.join()

task2_process.start()

5. 执行带有参数的任务

import multiprocessing


def show_info(name, age):
    print(name, age)

if __name__ == '__main__':

    # 1 以元组方式传参,元组里面的元素顺序要和函数的参数顺序保持一致,注意:若传入参数只有一个,需加一个‘,’,元组形式(param,)
    sub_process = multiprocessing.Process(target=show_info, args=('张三', '18'))
    sub_process.start()

    # 2 以字典方式传参,字典里元素顺序不需和函数参数顺序保持一致
    sub_process = multiprocessing.Process(target=show_info,kwargs={'age':20,'name':'张三'})
    sub_process.start()

6. 进程总结:

  1. 进程间不共享全局变量
  2. 主进程等所有子进程执行结束再结束
  3. 进程执行是无序的,由系统任务调度决定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值