【发布时间】:2015-10-07 18:51:40
【问题描述】:
我正在用 Python 设计一个应用程序,它应该访问一台机器来执行一些(冗长的)任务。 asyncio 模块似乎是所有与网络相关的东西的好选择,但现在我需要访问一个特定组件的串行端口。我已经为实际的串行端口实现了一种抽象层,但不知道如何合理地将它与 asyncio 集成。
以下设置:我有一个运行循环的线程,它定期与机器对话并解码响应。使用方法enqueue_query(),我可以将查询字符串放入队列中,然后由另一个线程发送到机器并引起响应。通过传入threading.Event(或任何带有set() 方法的东西),调用者可以执行阻塞等待响应。然后看起来像这样:
f = threading.Event()
ch.enqueue_query('2 getnlimit', f)
f.wait()
print(ch.get_query_responses())
我现在的目标是将这些行放入协程并让 asyncio 处理此等待,以便应用程序在此期间可以执行其他操作。我怎么能这样做?通过将f.wait() 包装到 Executor 中可能会起作用,但这似乎有点愚蠢,因为这会创建一个新线程,只是为了等待另一个线程做某事。
【问题讨论】:
标签: python events python-multithreading python-asyncio