多任务的概念
操作系统同时运行多个任务
进程与程序
程序:编写完成的代码,是一个静态的概念
进程:代码以及运行代码所需要的资源,正在运行的程序,是一个动态的概念
多进程实现—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())
有需改进的地方欢迎指正!