进程:
正在运行的程序,用来描述程序执行的过程(虚拟概念)
程序:指的是一堆代码
进程:程序的执行过程
操作系统:
用于协调/管理/控制,控制计算机
1.能够将复杂的硬件封装成简单的接口给用户使用
2.能够将竞争的任务变得有序
并发:多个任务看起来是同时运行的
串行:必须把一个任务完整的运行完,才能执行下一个任务
多道技术:
时间上的复用:多个程序复用CPU的时间
空间上的复用:多个程序复用内存空间
一个任务占用cpu时间过长会被操作系统强行夺走CPU的执行权限:比起串行执行效率更低
一个任务遇到io操作也会被操作系统强行夺走cpu的执行权限:比起串行执行效率更低
进程打开的两种方式:
方式1:
from multiprocessing import Process
import time
def task(name):
print('开始',name)
time.sleep(1)
print('finish...')
if __name__ == '__main__':
p = Process(target=task,args=('wxx',))
p.start() #向操作系统发送了一个开启子进程的请求,实际上是在调task
print('主进程...')
from multiprocessing import Process import time class auth(Process): def __init__(self,name): super().__init__() self.name = name def run(self): print('开始:',self.name) time.sleep(3) print('finish...') if __name__ == '__main__': p = auth('wxx') p.start() #向操作系统发送了一个开启子进程的请求,实际上是在调task print('主进程...')
join 方法
join 让主进程在原地等待,子进程运行完毕才会执行主进程
from multiprocessing import Process import time def task(name): print('start:',name) time.sleep(2) print('finish...') if __name__ == '__main__': p_list= [] for i in range(3): p = Process(target=task,args=(i,)) p_list.append(p) p.start() for p in p_list: p.join() print('主进程...')
互斥锁
from multiprocessing import Process,Lock import json,time def checker(name): with open('db.json','rt',encoding=('utf-8')) as f: dic = json.load(f) time.sleep(1) print('%s 查看还剩余票 %s'%(name,dic['count'])) def get(name): with open('db.json','rt',encoding=('utf-8')) as f: dic = json.load(f) if dic['count'] > 0: dic['count'] -= 1 print('%s 购买了机票' %name) with open('db.json', 'wt', encoding=('utf-8')) as wf: json.dump(dic,wf) else:print('没有票了') def task(name,mack): checker(name) mack.acquire() get(name) mack.release() if __name__=='__main__': mack = Lock() for i in range(10): p = Process(target=task,args=('name %s' %i,mack)) p.start()