同时监听/响应HTTP请求、串行端口和基于时间的事件的Python脚本?

2024-09-30 05:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我的简短问题:

我如何设计一个能够监听和响应通过HTTP或串行端口接收到的输入的Python脚本,以及如何独立地通过这些通道启动通信呢?我的问题是,我不明白如何设计一个脚本,既(I)使用web框架在某个端口上侦听HTTP输入,又(ii)也执行独立于传入HTTP请求的其他工作。在

长版: 我想用Python来设计一个执行以下操作的系统:

  • 监听一个串行端口以获取临时报告。具体地说,我有一个由JeeNode传感器(无线Arduino兼容模块)组成的网络,它与中央JeeLink通信,后者通过USB连接到我的计算机,并通过pySerial与Python脚本对话。在
  • 侦听web URL以获取偶尔的输入。具体地说,用户通过短信向系统发送命令,发送号码为Twilio。Twilio截取短消息并将其发布到我指定的URL,我使用Bottle micro web-framework来监听新的HTTP请求。在
  • 响应两种类型的输入(串行和HTTP)。例如,如果用户发送命令“Sleep”,我想(I)通过串行端口JeeLink告诉传感器进入睡眠状态(然后JeeLink会将命令转发到遥控器上);和(ii)回复发送者——也许还有其他用户——该命令已经收到并正在执行。在
  • 偶尔会启动自己与用户的通信(通过HTTP->;Twilio->;SMS)或远程传感器(通过串行->JeeLink),而不会触发任何输入事件。两个例子:(1)我希望每隔N分钟向用户或遥感器报告一次,即使我没有收到任何新的输入。(2) 我想告诉用户遥控器已经进入睡眠模式。因为遥控器是电池供电的,所以大部分时间都是在无法接近的低功耗模式下进行的。当他们在技术上可以接收到来自“唤醒”的命令时,<5分钟,他们可以有效地接收来自“唤醒”的命令。在

我的问题是,我见过的所有web框架的使用示例似乎都假设所有事件都是通过HTTP请求发生的。我可以创建一个Bottle对象,并使用decorator将代码绑定到该对象,该对象在看到与指定的URL路径匹配的HTTP请求时执行。但我不知道如何在同时做其他独立于HTTP事件的工作时做到这一点,例如监听串行端口。在

经过一番挣扎,我现在考虑的潜在解决方案是:

  • 将功能拆分为单独的脚本。A、 py通过HTTP监听文本消息,并将相关信息写入某个数据库;B.py不断地读取数据库中的新记录并作出相应的反应,以及监听串行监视器和其他工作。这看起来很好用,但感觉不雅观,我怀疑有一个更简单的解决方案我不知道。在
  • 也许答案与Python装饰器有关?我使用各种decorator来指定URL路径,当一个匹配的HTTP请求进来时,执行绑定到decorator的代码。所以我猜,也许有一种方法可以指定其他类型的装饰器,而不是监听HTTP请求,而是在我的“main”Python代码告诉它的时候执行它?但我对装修师的了解还不够,不知道这是不是真的。在

Tags: 对象端口代码用户命令脚本webhttp
1条回答
网友
1楼 · 发布于 2024-09-30 05:30:36

似乎您正在尝试编写一个异步应用程序来通过HTTP管理节点网络。您希望在多个通道上对传入的通信做出响应,您希望按计划在多个通道上启动通信,并且希望这两种通信形式相互作用。所有这些交流都是与一个缓慢的外部世界进行的,所以如果你不需要的话,你应该不去阻止。在

如果你把代码组织成几个Python模块,按它们的关注区域划分——串行接口代码、HTTP接口代码、通用处理代码路径等等,那么维护你的系统可能会更容易。把这些组件编织在一个中央控制模块中,中央控制模块会导入你的库,并且知道如何干净利落地开始和停止。然后,您可以独立于web接口测试串行接口,并可能在其他项目中重用这些Python模块。在

相关问题 更多 >

    热门问题