作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个使用 python3.4 中的 asyncio 进行联网的应用程序。当此应用程序干净地关闭时,节点需要与集线器“断开连接”。此断开连接是一个需要网络连接的事件过程,因此循环需要在关闭之前等待此连接完成。
我的问题是,使用协程作为信号处理程序会导致应用程序无法关闭。请考虑以下示例:
import asyncio
import functools
import os
import signal
@asyncio.coroutine
def ask_exit(signame):
print("got signal %s: exit" % signame)
yield from asyncio.sleep(10.0)
loop.stop()
loop = asyncio.get_event_loop()
for signame in ('SIGINT', 'SIGTERM'):
loop.add_signal_handler(getattr(signal, signame),
functools.partial(ask_exit, signame))
print("Event loop running forever, press CTRL+c to interrupt.")
print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
loop.run_forever()
如果您运行此示例然后按 Ctrl+C,则什么也不会发生。问题是,如何使用信号和协程实现这种行为?
最佳答案
python >=3.5 的语法
loop = asyncio.get_event_loop()
for signame in ('SIGINT', 'SIGTERM'):
loop.add_signal_handler(getattr(signal, signame),
lambda: asyncio.ensure_future(ask_exit(signame)))
关于python - asyncio - 如何在信号处理程序中使用协程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313720/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!