多任务,指操作系统能够执行多个任务,每个任务就是一个进程。
使用mulitprocessing模块创建进程
运行结果:
主进程开始
主进程结束
我是子进程
对于简单小任务,通常使用Process(target=test)方法实现多进程。但是如果要处理复杂任务的进程,通常定义一个类,使其集成Process类,每次实例化这个类的时候,就等同于实例化一个进程对象。
如果需要处理多个任务,可以在一个应用程序内使用多个进程,每个进程完成一部分工作。另一种将工作细分为多个任务的方法是使用一个进程内的多线程。Thread线程是操作系统能进行运算调度的最小单位。他被包含在进程之中,一个进程中可以并发多个线程,每个线程并行执行不同的任务。
Python的标准库提供了两个模块,_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。
一个进程可以有多个线程Thread.
进程之间不能共享数据,只能通过队列,管道等方法实现。
线程之间可以共享数据。
由于线程可以对全局变量随意修改,可能造成多线程之间对全局变量管理的混乱。引入互斥锁的概念。Mutual exclusion,防止多个线程同时读写某一块内存区域。
互斥锁为资源引入一个状态:锁定和非锁定。保证了每次只有一个线程进入读写操作。
mutex = threading.Lock()
mutex.acquire(blocking)
mutex.release()
购买成功,剩余99
购买成功,剩余98
购买成功,剩余97
购买成功,剩余96
购买成功,剩余95
购买成功,剩余94
购买成功,剩余93
购买成功,剩余92
购买成功,剩余91
购买成功,剩余90