python:进程与多进程

一、概念
进程:是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程。例如:正在运行的qq , 微信等 他们都是一个进程。

多进程:多个程序运行;
多进程存在两种运行方式,一种是“并发”,指cpu让多个程序交替轮流运行,但因运行速度太快,会误以为多个程序同时运行,是伪多进程;还有一种是“并行”,指cpu让多个程序真的同时运行。

多进程执行代码:

例:
import time,multiprocessing     #导包
def sing():       #定义函数1
    for i in range(5):
        time.sleep(0.01)
        print('想唱就唱,要唱得响亮!')
def dance():    #定义函数2
    for i in range(5):
        time.sleep(0.01)
        print('想跳就跳,要跳得飞扬!')
      '''
     (window电脑的多进程必须添加main判断,否则会无限递归产生子进程,并start
     因为在 Windows 上,Python 使用 spawn 方式创建进程,每个子进程都会重新导入       
     (import)主模块,并从头开始执行代码。)
     '''
if __name__=='__main__':          #main为主进程
    p1=multiprocessing.Process(target=sing)       #创建子进程1
    p2=multiprocessing.Process(target=dance)    #创建子进程2
    p1.start()     #子进程1运行
    p2.start()     #子进程2运行

二、多进程特点:1.进程之间不共享全局变量;2.主进程进程会等所有的子进程执行结束而结束;3.多进程之间是无序的。

第1和3点无法解决,但第二点一般可以通过两种方式(1.daemon函数;2.terminate函数)处理。

处理代码如下:

例:
import multiprocessing,time
def music():        #定义函数
    for i in range(5):
        print(f'正在播放第{i}首音乐')
if __name__=='__main__':
    print(f'主进程开始,{multiprocessing.current_process().name}')
    p1=multiprocessing.Process(target=music)
    #第一种处理方式:p1.daemon=True ,守护主进程,主进程退出子进程直接销毁,不再执行
    p1.start()
    time.sleep(0.2)
    # 第二种处理方式:
    p1.terminate():在主进程结束前强制结束子进程
    print(f'主进程结束,{multiprocessing.current_process().name}')

最后提示:
1.在创建子进程时,可以通过元组(args)或者字典(kwargs)形式向内里传参,如:sing_process = multiprocessing.Process(target=music, args=(3, ))dance_process = multiprocessing.Process(target=coding, kwargs={‘count’: 3}),只要原有函数有传参需求,就可以这样操作;
2.获取当前父进程(如果主进程直接创造子进程,则父进程也就是主进程,如果不是,那么另说)和子进程的id代码分别为:os.getppid()、os.getpdi(),有需要可查看(ppid意味是parent pid)。
注意:获取id前先导入os包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值