Python 自学笔记 总结 3.0 多任务编程

发布于:2023-01-19 ⋅ 阅读:(474) ⋅ 点赞:(0)

三.多任务编程

 1. 计算机任务执行

        ·CPU:中央处理器(central processing unit ,简称CPU),用于任务执行运算,主流架构形式有因特尔的X86跟ARM,ARM主要用于移动端。

·操作系统调用CPU执行任务

应用程序 应用程序 应用程序 应用程序

                                                                👇

                                                操作系统

                                                                 👇

                                CPu/         内存/         硬件等

·CPU轮询:cpu在多个任务之间快速的切换执行,因为切换的速度在微妙级别,所以看起来就像同时在执行多个任务。

(1)一个cpu核心同一时刻只能执行一个任务

(2)多核心CPU可以理解为多个单核心CPU的集合

·并发与并行

并发:多个任务同时分配给一个CPU核心切换执行,这种情况就是并发,但是多个任务并真正的同时执行。

并行:多个任务同时分配给不同的CPU核心,同时执行,这种情况是并行,并行是多个任务真正的同时执行。




2. 什么是多任务编程?

·多任务编程: 在一个程序中编写多个任务,在程序运行中让多个任务同时执行。

·实现方法:多进程编程,多线程编程

·多任务编程好处:1)提高程序任务之间的配合、

                              2)充分利用计算机资源,提高了程序任务执行效率




3.进程Process

·程序是一个可执行文件,静态的存放在磁盘

·进程是一个动态的过程描述,会占有计算机运行资源,有自己的生命周期

进程三态        就绪:进程具备执行条件,等待系统调度分配资源

                      运行:进程占用CPu执行

                      执行:进程阻塞等待,让出CPU资源

主要类跟函数使用

Process:创建进程对象

target:绑定执行的目标函数

args(元组):给target函数位置传参

kwargs(字典):给target函数值传参 

start():启动进程

使用进程

        模块:multiprocessing

创建步骤:

1.将需要新进程执行的事件封装成函数

2.通过模块的Process类创建进程对象,关联函数

3.通过进程对象设置进程信息与属性

4.通过进程对象调用start启动进程

5.通过进程对象调用join回收资源

 无参函数

#导入模块 multiprocessing
import multiprocessing
from time import sleep

#创建进程执行的函数
def fun():
    print('子进程函数开始执行···')
    #睡眠模拟程序执行
    sleep(2)
    print('子进程函数执行完成···')

#Windows系统下  必须把子进程相关代码放入IF    Linux不需要
if__name__=='main__':
    #创建子进程对象
    p=multiprocessing.Process(target=fun)

    #启动子进程,进程诞生并执行fun函数
    p.start()

    #主进程执行模拟
    print('主进程开始执行···')
    sleep(3)
    print('主进程执行完成···')
    #回收
    p.join()

函数传参 

 

#导入模块 multiprocessing
import multiprocessing
from time import sleep

#创建包含参数的进程函数
def emp (sec,name):
    for i in range(3):
        sleep(sec)
        print('my name is %S'%name)

if__name__=='main__':


#两种传参方式,位置传参和关键字传参
#1.位置传参
p=Process (target=emp,args=(2,'xiaogui'))

#执行
p.start()

#回收
p.join()



#2.关键字传参
p=Process (target=emp,kwargs={'name':'xiaogui','sec':4})
p.start()
p.join()

 

from multiprocessing import Process
import time

#创建函数
def fun ():
    fot i in range(3):
        #打印时间
        print(time.ctime())
        time.sleep(2)

if__name__=='__main__':

    p=Process(targe=fun)

    #设置True  子进程随父进程的退出而退出
    #在start前设置
    p.daemon=True

    p.start()

    #查看进程的名字
    print(p.name)

    #查看进程的ID
    print(p.pid)

    #查看进程的存活状态
    print(p.is_alive())



'''
os.getpid    获取子进程
os.getippid    获取父进程
sys.exit    退出进程
'''
from multiprocessing import Process
import time,os,sys

#创建多个函数
def fun1():
    time.sleep(2)
    print('看书')
    print(os.getppid(),'---',os.getpid())


def fun2():
    time.sleep(2)
    print('听歌')
    print(os.getppid(),'---',os.getpid())

def fun3():
    time.sleep(2)
    print('睡觉')
    print(os.getppid(),'---',os.getpid())

if __name__=='__main___':
    #函数列表
    process_list=[fun1,fun2,fun3]
    #回收列表
    jobs=[]
    #循环执行多个进程
    for fun in process_list:
        p=Process(target=fun)
        jobs.append(p)
        p.start
    #循环回收
    for i in jobs:
        i.join()

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到