并发:
计算机一个内核处理多个任务,其实就是内核在任务间不停的切换,达到好像多个任务同时在执行,实际上每个时刻只有一个任务在执行
并行:
多个任务利用计算机的多核同时执行,达到并行的效果
进程:
进程是程序在计算机种运行,代表是的是程序运行的一个状态
进程的状态:
就绪态:进程具备执行条件,等待cpu分配资源
运行态:进程占用cpu时间片
等待态:进程暂停运行,让出时间片
相关的进程函数
os.getpid()
os.getppid()
os.exit()
sys.exit()
python实现多进程:
------基于fork实现: windows上不支持。只支持linux和unix系统
注意。如果os.fork()创建子进程成功。那么会将父进程的内存空间和代码复制一份给子进程。所以下例中,a变量和print(os.getpid())语句也带到了子进程中,所以会打印两次print(os.getpid())
import os from time import sleep pid = os.fork() #开启子进程,并将自己的内存空间和代码全部复制给子进程 a = 1 #在当前继承将a=1放到内存空间 print(os.getpid()) if pid < 0: #pid<0,进程创建失败 print('create process failed') elif pid == 0: #子进程走这里 print('this is new process') print('a=',a) else: #父进程走这里 print('tihs is old process')
![](/i/l/?n=22&i=blog/1278671/202211/1278671-20221116223457583-214203034.png)
---基于multiprocessing创建进程
from multiprocessing import Process
--Process()
功能 : 创建进程对象
参数 : target 绑定要执行的目标函数
args 元组,用于给target函数位置传参
kwargs 字典,给target函数键值传参
''' multiprocessing创建进程 1.编写进程函数 2.生成进程对象 3.启动进程 4.回收进程 ''' from multiprocessing import Process from time import sleep # 有参数的进程函数 def worker(sec,name): for i in range(3): sleep(sec) print("I'm %s"%name) print("I'm working...") # 创建进程对象,通过args 给函数位置传参 p = Process(target=worker,args=(2,), kwargs={'name':'Baron'}) #启动子进程 p.start() #其中2表示,只阻塞2秒,2秒过后,子进程自动结束 #回收子进程 p.join()
---如何创建多个子进程
from multiprocessing import Process from time import sleep import os def th1(): sleep(3) print("吃饭") print(os.getppid(),'--',os.getpid()) def th2(): sleep(2) print("睡觉") print(os.getppid(),'--',os.getpid()) def th3(): sleep(4) print("打豆豆") print(os.getppid(),'--',os.getpid()) things = [th1,th2,th3] jobs = [] for th in things: p = Process(target=th) jobs.append(p) # 对进程对象进行存储 p.start() # [i.join() for i in jobs] # 一起回收 for i in jobs: i.join()
--进程池
进程的创建和销毁的过程会消耗的资源较多,如果任务量很多,每个任务又是在很短时间内完成,需要频繁创建进程和销毁,因此消耗大量的计算机资源,所以我们可以创建一定数量的进程来处理事件,事件处理完进 程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁。增加进程的重复利用,降低资源消耗。
标签:--,print,sleep,进程,import,os,多任务 From: https://www.cnblogs.com/powfu/p/16897825.html