2014-02-09 50 views

回答

2

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

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

总之,使用绿色线程时不要使用threading锁。

+0

感谢您的回答!那么绿色线程环境的锁定选择是什么? –

+1

另一种方法是避免锁定,因为您可以精确控制上下文切换的发生时间,所以eventlet程序通常不需要锁定以防止程序在处理过程中相互踩踏。使用eventlet注意,您也可以对标准库进行猴补丁修补,这将使用eventlet锁代替线程模块中的锁。事件锁定实现的行为类似于相应的线程锁定,但也会导致线程退出,可能导致上下文切换。 –

+0

啊,对!我们也使用猴子补丁!所以,使用猴子补丁可以安全地使用锁,对吧? –