多任务编程

多任务编程

关于进程的Markdown笔记

1.多任务进程

import multiprocessing  # 导入多进程包
import time  # time包作用是停顿等待,显示多任务在共同执行


# 跳舞任务
def dance():
    for i in range(5):
        print("跳舞中...")
        time.sleep(0.2)  # 停顿0.2s

# 唱歌任务
def sing():
    for i in range(5):
        print("唱歌中...")
        time.sleep(0.2)

if __name__ == '__main__':
    # 创建跳舞的子进程
    # group: 表示进程组,目前只能使用None
    # target: 表示执行的目标任务名(函数名、方法名)
    # name: 进程名称, 默认是Process-1, .....
    dance_process = multiprocessing.Process(target=dance, name="myprocess1")
    sing_process = multiprocessing.Process(target=sing)

    # 启动子进程执行对应的任务
    dance_process.start()  # 启动子进程
    sing_process.start()  # 启动子进程

执行结果展示:
多任务执行结果展示

2.获取进程编号

注意:需要导入os包
os.getpid() 打印当前进程编号
multiprocessing.current_process() 获取当前进程名字
os.getppid() 获取当前进程的父进程

# 获取当前的进程编号
import multiprocessing  # 导入进程包
import os  # 导入os包(os包是一个内置包,主要负责新建文件、改文件名、路径、操作电脑系统相关的功能。)
import time
# work1函数
def work1():
    print("work1的当前编号:",os.getpid()) # 打印当前进程编号
    print("work1的名字:",multiprocessing.current_process()) # 获取当前进程名字
    print("work1的父进程是:",os.getppid())  # 获取work1的父进程
    for i in range(5):
        print("1正在工作中。。。")
        #time.sleep(0.2)

# work2()函数
def work2():
    print("work2",os.getpid())
    print("work2:",multiprocessing.current_process())
    print("work2的父进程是:",os.getppid())
    for i in range(5):
        print("2正在工作中。。。")
        #time.sleep(0.2)

if __name__ == '__main__': # 主进程
    print("main:",os.getppid())           # main函数的父进程是.py文件
    # 创建work1子进程
    work1_process = multiprocessing.Process(target = work1,name = "work1process")
    # 创建work2子进程
    work2_process = multiprocessing.Process(target = work2,)
    # 启动子进程执行其任务
    work1_process.start()
    work2_process.start()

代码执行的结果为:
获取进程编号

3.进程执行带有参数的任务

import  multiprocessing
import time

# 带有参数的任务
def work(count,num):
    for i in range(count,num):  # [5:12)
        print("正在工作中。。。")
        time.sleep(0.2)
    else:
        print("任务执行完毕")
if __name__ == '__main__':
    # 从创建子进程
    work_process = multiprocessing.Process(target=work,kwargs = {"count":5,"num":12})  # kwargs是字典  args是元组   [5:12)
    work_process.start()

代码执行的结果:
进程执行带有参数的任务

5.进程的注意点

进程中的全局变量不共享

import multiprocessing
import time

# 全局变量
g_list = []

# 带有参数的任务
def work(count,num):
    for i in range(count,num):
        g_list.append(i)  # 添加到全局变量
        print("结果:",i)
        #time.sleep(0.2)
    print("g_list:",g_list)  # 读取最终的全局变量
def work2():
    for i in range(10):
        g_list.append(i)
        print("结果2:",i)
        #time.sleep(0.2)
    print("read_data:",g_list)  # 读取work2的最终全局变量
# 主进程
if __name__ == '__main__':
    work_process = multiprocessing.Process(target=work,kwargs={"count":5,"num":20})
    work2_process = multiprocessing.Process(target=work2)
    work_process.daemon = True  # daemon置为True  主线程不关心子线程运行状态,主线程退出,子线程也必须跟着退出。
    work2_process.daemon = True
    work_process.start()
    work2_process.start()

    # 守护主进程
    # 主进程退出子进程销毁不再执行
    # work_process.daemon = True
    # work2_process.daemon = True

    # 子进程销毁
    #work_process.terminate()
    #work2_process.terminate()
    # 子进程执行结束
    # 主进程执行完毕,延迟0.5s
    time.sleep(1)
    print("结束")
    work_process.terminate()
    work2_process.terminate()
    exit()

代码执行的结果:
代码的一些注意点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊佩萁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值