理论上讲,Python是不存在线程安全问题的,由于GIT么,但是这是有前提的:sleep,I/O导致的wait都可能会引发线程安全隐患。
同理,gevent是基于事件驱动模型的,就不太可能是线程安全的。
gevent.coros.Semaphore提供了信号量的功能,可以是n个哦!
semaphore.acquire() -> 获取“锁”
semaphore.release() -> 释放“锁”
gevent的文档写的真简介啊,于是测试了个基本的同步方法:同步某一关键区,供大家参考:
''' Created on Sep 20, 2011 @author: liheyuan ''' from gevent.coros import Semaphore from gevent.greenlet import Greenlet from gevent import sleep import random semaphore = Semaphore() def test(): #critical start!!! semaphore.acquire() for i in xrange(100): print "1" sleep(random.random()) print "2" semaphore.release() #critical end!!! if __name__ == "__main__": print "Hello World" print "Before ,", cnt gs = [] for i in xrange(100): gs.append(Greenlet.spawn(test)) for g in gs: g.join() print "After ,", cnt