当我尝试使用kill()杀死一个greenlet时,一个'块' param默认为True,
Greenlet.kill(self, exception, block, timeout)
文件说:
如果block True (默认值),请等待greenlet死亡或 可选的超时到期。如果block False ,则为当前 greenlet不是不定期的。
如何正确理解这一点? THX
答案 0 :(得分:2)
假设您有两个greenlets A
和B
。
1)在B
内,您拨打A.kill(block=True)
。在上下文切换发生后,Python立即跳转到A
并在A
中引发异常。 A
可能会处理它,它可能会跳到其他地方,可能会在终止时发生超时等等。
2)在B
内,您拨打A.kill(block=False)
。上下文切换不会发生。 B
在kill之后继续运行其他命令。 Kill命令计划启动,即一旦Python跳转到A
,它就会引发异常。
所以AFAIK“阻止”只是意味着“立即切换”。