首页  >  文章  >  后端开发  >  如何在 Python 的多处理池中优雅地处理键盘中断?

如何在 Python 的多处理池中优雅地处理键盘中断?

Patricia Arquette
Patricia Arquette原创
2024-10-22 14:33:02134浏览

How to Gracefully Handle Keyboard Interrupts in Python's Multiprocessing Pools?

在 Python 的多处理池中处理键盘中断

当尝试在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn