当我尝试使用 kill() 杀死一个 greenlet 时,'block' 参数默认为 True,
Greenlet.kill(self, exception, block, timeout)
文档说:
If block is True (the default), wait until the greenlet dies or the optional timeout expires. If block is False, the current greenlet is not unscheduled.
如何正确理解这个?谢谢
最佳答案
假设您有两个 greenlet A
和 B
。
1) 在 B
中调用 A.kill(block=True)
。上下文切换发生后,Python 立即跳转到 A
并在 A
中引发异常。 A
可能会处理或不处理它,它可能会跳转到其他地方,可能会在 kill 时发生超时,等等。
2) 在 B
中调用 A.kill(block=False)
。上下文切换不会发生。 B
kill后继续运行其他命令。不过,Kill 命令已按计划触发,即一旦 Python 跳转到 A
,它就会引发异常。
所以 AFAIK“阻止”仅表示“立即进行切换”。
关于python - 'kill' greenlet block 与否有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21252024/