首页 > 代码库 > 线程,进程

线程,进程

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做一些封装,多进程模块就帮忙做了这个事情。

 

线程,进程