首页 > 代码库 > 线程,进程
线程,进程
1.线程
event
An event is a simple synchronization object
the event represents an internal flag,and threads can wait for the flag to set ,or set or clear flag themselves
event = threading.Event()
# an client thread can wait for the flag to be set
event.wait()
# a server thread can set or reset it
event.set()
event.clear()
if the flag is set, the wait method doesn‘t be blocked
if the flag is cleared ,wait method will be blocked until it becomes set again
任意数量的线程可以等待同一个event
下面是一个红绿灯的例子:
import threading,time import random def light(): if not event.isSet(): event.set() #wait就不阻塞 #绿灯状态 count = 0 while True: if count < 10: print(‘\033[42;1m--green light on---\033[0m‘) elif count <13: print(‘\033[43;1m--yellow light on---\033[0m‘) elif count <20: if event.isSet(): event.clear() print(‘\033[41;1m--red light on---\033[0m‘) else: count = 0 event.set() #打开绿灯 time.sleep(1) count +=1 def car(n): while 1: time.sleep(1) if event.isSet(): #绿灯 print("car [%s] is running.." % n) else: print("car [%s] is waiting for the red light.." %n)
event.wait() if __name__ == ‘__main__‘: event = threading.Event() Light = threading.Thread(target=light) Light.start() for i in range(3): t = threading.Thread(target=car,args=(i,)) t.start()
虽然在python中由于cpython解释器GIL的限制,同时只允许一个线程运行,但是还是比串行运行快很多。因为线程在遇到io操作和sleep操作时,线程就会切换。多线程适合io密集型的应用,cpu密集型应用应该使用多进程,这样能充分利用多核cpu的性能
进程:
python的多进程使用的是原生进程。
多进程通信
(1) Queue
queue 是线程安全的。
多进程使用的Queue 和多线程使用的queue是有区别的,由于进程间的内存空间是不共享的,要想多进程之间都能访问queue,必须要对多线程使用的queue做一些封装,多进程模块就帮忙做了这个事情。
线程,进程