在做其他工作的同时通过 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 接收消息的主要内容,如果未能解决你的问题,请参考以下文章