当尝试在 Python 的多处理池中管理键盘中断事件时,用户经常会遇到进程挂起并需要外部终止的问题。本文旨在解决这个问题并提供一个可行的解决方案。
为了详细说明问题中引入的挑战,提供的代码旨在在收到 KeyboardInterrupt 信号(通过按 ^)后优雅地终止池中的所有进程。 C)。然而,正如观察到的,KeyboardInterrupt 会触发执行暂停,从而阻止预期的终止过程生效。
这是由于 Python 错误阻碍了 KeyboardInterrupt 信号传递给 threading.Condition.wait( ) 状况。出现此问题的原因是除非指定超时,否则 wait() 不会返回。因此,在此过程中不会收到键盘中断。
为了克服这一挑战,建议的解决方案包括在 wait() 条件中引入时间限制:
<code class="python">results = pool.map_async(slowly_square, range(40)).get(9999999)</code>
通过合并此超时, wait() 条件被迫立即响应 KeyboardInterrupt 信号,从而允许正常终止池中的所有进程。
因此,此修改提供了一种在 Python 多处理池中管理键盘中断的稳健方法,使用户能够在任何给定时间以受控方式有效停止所有进程。
以上是如何在 Python 的多处理池中优雅地处理键盘中断?的详细内容。更多信息请关注PHP中文网其他相关文章!