gpt4 book ai didi

python - 扭曲:正确捕获键盘中断和关闭

转载 作者:IT老高 更新时间:2023-10-28 21:09:23 25 4
gpt4 key购买 nike

更新:为了便于阅读,这里是如何在 react 器关闭之前添加回调:

reactor.addSystemEventTrigger('before', 'shutdown', callable)

原始问题如下。


如果我有一个客户端连接到服务器,并且它在 react 堆主循环中等待事件,当我按下 CTRL-C 时,我得到一个“与另一端的连接以非干净方式丢失:连接丢失。”如何设置它以便我知道键盘中断何时发生,以便我可以进行适当的清理并干净地断开连接?或者如果可能的话,我如何实现一种不涉及 CTRL-C 的更简洁的关机方式?

最佳答案

如果你真的,真的想专门捕捉 C-c,那么你可以用 Python 应用程序的通常方式来做这件事 - 使用 signal.signalSIGINT 安装处理程序做任何你想做的事。如果您从处理程序调用任何 Twisted API,请确保使用 reactor.callFromThread因为几乎所有其他 Twisted API 对于从信号处理程序调用都是不安全的。

但是,如果您真的只是对插入一些关闭时清理代码感兴趣,那么您可能想要使用 IService.stopService (或实现它的机制,reactor.addSystemEventTrigger )。

如果您使用 twistd ,然后使用 IService.stopService简单。您已经有一个 Application至少附加一项服务的对象。您可以使用自定义 stopService 添加另一个关闭工作的方法。允许该方法返回 Deferred .如果是,则关闭过程暂停,直到 Deferred火灾。这可以让您很好地清理连接,即使这涉及更多的网络(或任何其他异步)操作。

如果您不使用 twistd ,然后使用 reactor.addSystemEventTrigger直接可能更容易。您可以安装一个 before shutdown 触发器,它会在相同的情况下被调用 IService.stopService会被调用。这个触发器(任何可调用对象)也可以返回 Deferred延迟关机。这是通过调用 reactor.addSystemEventTrigger('before', 'shutdown', callable) 来完成的。 (在启动关机之前的某个时间,以便在关机发生时已经注册)。

service.tac给出了一个创建和使用自定义服务的例子。

wxacceptance.py给出一个使用 addSystemEventTrigger 的例子并将关机延迟(任意)三秒。

这两种机制都会在 react 器停止时向您发出通知。这可能是由于 C-c 击键,也可能是因为有人使用了 kill -INT ... ,或者可能是因为某处reactor.stop()被称为。它们都导致 react 堆关闭, react 堆关闭总是处理关闭事件触发器。

关于python - 扭曲:正确捕获键盘中断和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3453451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com