python线程中的Lock行为和绿色线程之间有什么区别?

时间:2014-02-09 22:11:36

标签: python python-2.7 locking eventlet green-threads

通常的python线程和greenthread(eventlet)中的threading.Lock()threading.Semaphore()行为有什么区别吗?

1 个答案:

答案 0 :(得分:2)

行为没有区别。但是,绿色线程实际上不是一个线程,因为它在单个OS线程中运行其所有任务,因此threading.Lockthreading.Semaphore的行为就好像它被锁定并从单个线程解锁一样。

这意味着如果您在使用绿色线程时尝试获取锁定的锁定或置零的信号量,则整个程序将永久阻塞(或直到指定的超时)。此外,RLock只能从它锁定的同一个线程中释放,因为绿色线程实际上都在相同的线程上运行,您将能够从不同的绿色线程释放RLock。

简而言之,使用绿色线程时请勿使用threading锁。