标签:表示 默认 rom and nbsp color his boolean 生产者与消费者
和进程之间的区别:
进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
线线程不能够独立执行,必须依存在进程中
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
使用互斥锁实现线程同步
from threading import Thread,Lock from time import sleep class Task1(Thread): def run(self): while True: if lock1.acquire(): print("------Task 1 -----") sleep(0.5) lock2.release() class Task2(Thread): def run(self): while True: if lock2.acquire(): print("------Task 2 -----") sleep(0.5) lock3.release() class Task3(Thread): def run(self): while True: if lock3.acquire(): print("------Task 3 -----") sleep(0.5) lock1.release() #使用Lock创建出的锁默认没有“锁上” lock1 = Lock() #创建另外一把锁,并且“锁上” lock2 = Lock() lock2.acquire() #创建另外一把锁,并且“锁上” lock3 = Lock() lock3.acquire() t1 = Task1() t2 = Task2() t3 = Task3() t1.start() t2.start() t3.start()
运行结果:
------Task 1 -----
------Task 2 -----
------Task 3 -----
------Task 1 -----
------Task 2 -----
------Task 3 -----
------Task 1 -----
------Task 2 -----
------Task 3 -----
------Task 1 -----
------Task 2 -----
------Task 3 -----
------Task 1 -----
------Task 2 -----
------Task 3 -----
...省略...
重要方法:
1 t.setDaemon(True)#默认是False,True表示主线程执行到程序结尾不管子线程是否执行完,都结束程序 2 """A boolean value indicating whether this thread is a daemon thread. 3 4 This must be set before start() is called, otherwise RuntimeError is 5 raised. Its initial value is inherited from the creating thread; the 6 main thread is not a daemon thread and therefore all threads created in 7 the main thread default to daemon = False. 8 9 The entire Python program exits when no alive non-daemon threads are 10 left. 11 12 """
主线程等待子线程执行:
t.join() #等待子线程执行完然后主线程接着执行,变态用法,这样子线程的并发就没有意义 t.join(2)#与上面类似,不过最多等2秒
event
执行结果:
队列(生产者与消费者)
标签:表示 默认 rom and nbsp color his boolean 生产者与消费者
原文地址:http://www.cnblogs.com/wangwei916797941/p/6770228.html