在做其他工作的同时通过 python 接收消息

Posted

技术标签:

【中文标题】在做其他工作的同时通过 python 接收消息【英文标题】:Receiving messages via python while doing other work 【发布时间】:2013-03-22 19:47:07 【问题描述】:

我有一个 python 脚本 A 和一个 python 脚本 B。

它们都是独立运行的。我想,一旦脚本 B 完成执行,它应该向脚本 A 发送一条消息,“B Done”。

一个简单的消息可以由套接字等发送。但是,脚本 A 正在做自己的一些工作。如何在不停止执行 A 的情况下让 A 监听 B?

非常感谢任何帮助!

编辑:

B 完全受 CPU 限制 - 计算。 A 是 I/O 绑定和 CPU 绑定的混合体。用户以不规则的间隔干预输入(如设置的键盘记录器),其中 I/O 显然是击键,而 CPU 绑定任务是对输入的键执行一些计算。

【问题讨论】:

他们在做什么工作? CPU 或 IO 绑定?设置的总体情况是什么? 【参考方案1】:

这个领域的问题有很多解决方案。

您可能需要查看ZMQ,它可以轻松地在应用程序之间创建消息传递模式。

消息通道将在自己的线程中运行,如果与gevent 一起使用,这可能是一个“绿色”线程以避免不必要的开销。

结合gevent和zmq的几个例子:https://github.com/zeromq/pyzmq/tree/master/examples/gevent 不同消息模式的绝佳指南:ZMQ Guide

使用这些库在 A 和 B 之间创建一个通道,该通道不断轮询新工作并报告结果。

存在一些其他解决方案,您在 A 和 B 之间有一个代理,但直接设置节点之间的链接可能更适合您所描述的交互式应用程序。

【讨论】:

谢谢。似乎是一个很好的解决方案。如果明天没有更简单的解决方案,我会接受。 :) 这是最简单的解决方案 ;) ZMQ + gevent 将是我处理此要求的 goto 方法。您可以省略 gevent 并使用普通的 Python 线程,但如果进程 A 受 CPU 限制,那么您将在线程中进行大量上下文切换而无济于事。如果它是 I/O 绑定的,那么 Python 线程将非常适合。

以上是关于在做其他工作的同时通过 python 接收消息的主要内容,如果未能解决你的问题,请参考以下文章

同时发送/接收消息套接字python

如何通过其他节点在CAN总线上确认传输CAN消息?

在做其他事情的同时在 C++ 中播放声音

RESTful架构与其他架构的区别

RESTful架构与其他架构的区别

Alpha版本测试报告