'kill'greenlet block之间有什么区别?

时间:2014-01-21 07:41:00

标签: python gevent greenlets

当我尝试使用kill()杀死一个greenlet时,一个'块' param默认为True,

Greenlet.kill(self, exception, block, timeout)
文件说:

  

如果block True (默认值),请等待greenlet死亡或   可选的超时到期。如果block False ,则为当前   greenlet不是不定期的。

如何正确理解这一点? THX

1 个答案:

答案 0 :(得分:2)

假设您有两个greenlets AB

1)在B内,您拨打A.kill(block=True)。在上下文切换发生后,Python立即跳转到A并在A中引发异常。 A可能会处理它,它可能会跳到其他地方,可能会在终止时发生超时等等。

2)在B内,您拨打A.kill(block=False)。上下文切换不会发生。 B在kill之后继续运行其他命令。 Kill命令计划启动,即一旦Python跳转到A,它就会引发异常。

所以AFAIK“阻止”只是意味着“立即切换”。