多进程创建,进程状态,进程池及进程之间的通信

多任务的概念

操作系统同时运行多个任务

进程与程序

程序:编写完成的代码,是一个静态的概念
进程:代码以及运行代码所需要的资源,正在运行的程序,是一个动态的概念

多进程实现—multiprocessing

import os
import multiprocessing
from multiprocessing import Process

def child_process_func(name):
    print('当前执行的进程是子进程,进程是{},父进程编号是{},当前子进程的名字是{}'.format(os.getpid(),os.getppid(),name))

if __name__ == '__main__':
    #创建子进程
    print('父进程id',os.getpid())
    cp=Process(target=child_process_func,args=('子进程',))
    
    #调用
    cp.start()
    
 注意点:
 1、赋值记得后面要加,(逗号)成元组,否则默认是字符串系统默认输入“子进程”

关于全局变量

多进程中,每个进程中所有的数据(包括全局变量),不共享,每个进程都各自拥有自己的数据,互不影响。

注意点:
父进程与子进程执行顺序不能由程序员决定,没有规律,完全取决于操作系统的调度方法

关于重写多进程

from multiprocessing import Process

def func():
    print('这是tarrget指定的函数')

class MyProcess(Process):
    def __init__(self,cname):
        # Process.__init__(self) 此方法也可行
        super().__init__()
        self.cname=cname
    def run(self):
        print('展示进程的调用')

if __name__ == '__main__':
    # mp=MyProcess(target=func())
    mp=MyProcess('进程类')
    mp.start()

进程的状态

在这里插入图片描述注意点:

进程是操作系统进行分配资源的基本单位。(就绪状态下最耗资源)

线程是操作系统进行调度资源的基本单位。

进程池

apply_async 使用的是非阻塞的方式调用
apply 使用的是阻塞的方式调用函数
阻塞方式必须等待上一个进程退出之后才能执行下一个进程
并发:交替
并行:同时

进程之间的通信-Queue

# from multiprocessing import Queue
# #
# # que=Queue(3)
# # que.put(1)
# # que.put(2)
# # que.put(3)
# # # que.put(4)   #当第四个存进去时就会处于阻塞状态,既不报错也不停止
# ##que.put(5,False)  #当储存满时立即报错
# ##que.put(5,True,2)  #此时的意思是继续存储,当2s后还没存进去的时候在报错
# # print(que.get())  #取出值。当取出值的时候,此时就可以继续往que中存储
# # print(que.get())
# # print(que.get())

有需改进的地方欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值