通常
的python线程和绿线程(eventlet)中的threading.Lock()
,threading.Semaphore()
行为之间有什么区别吗?
行为没有区别。但是,绿色线程实际上并不是线程,因为它在单个操作系统线程中运行其所有任务,因此threading.Lock
和threading.Semaphore
的行为就像是从单个线程锁定和解锁一样。
这意味着如果您在使用绿色线程时尝试获取锁定的锁或清零信号量,则整个程序将永远阻塞(或直到指定的超时)。此外,RLock 只能从它锁定的同一线程中释放,因为绿色线程实际上都在同一线程上运行,您将能够从不同的绿色线程释放 RLock。
简而言之,使用绿色螺纹时不要使用threading
锁。