python - 'kill' greenlet block 与否有什么区别

标签 python gevent greenlets

当我尝试使用 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 AB

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/

相关文章:

python - 我如何使用模拟在 greenlet 中进行测试?

python - timeit 与计时装饰器

python - 在 PyQT4 中使用循环创建按钮网格

python - 使用 Python 通过 STDIN/STDOUT 启动和控制外部进程

python - 如何解决 Windows 上的 "NotImplementedError"urllib2/gevent 错误?

flask - 从 greenlet 内访问 Flask 应用程序上下文

python - Gevent Pywsgi 服务器 - 多处理?

python - 在 Linux x86_64 for PowerPC 上交叉编译 Python 的 greenlet 和 gevent

python - 如何防止执行脚本时打开 HTML 本地文件?

django - 如何运行 nginx、gevent、virtualenv 和 django