我已经找了几个小时的问题的答案,但没能解决,所以我把这个问题贴在这里,我相信这是微不足道的。在
我工作的项目有许多类和线程,我正在添加一些小类。这些类用project的引擎在不同的线程中执行,但我需要它们在它们之间进行同步-也就是说,类A应该能够向类B发送消息,它们也在不同的模块中。在
编辑2:这个问题有一个新的解释:看底部。
我是python的初学者,我试图通过共享queue对象来解决这个问题(排队。排队())在无尽的循环中检查它的内容,我用这个对象和get和put方法制作了一个非常简单的模块:
通讯器模块:
import Queue
MessageQueue = Queue.Queue()
def GetMessage():
return MessageQueue.get()
def PutMessage(message):
MessageQueue.put(message)
return
并在两个不同的类中使用它(import messenger),但由于它不是全局变量,所以我假设“MessageQueue”对象在不同的类中有不同的实例。因为这些类似乎在不同的队列中工作。在
如何在两个类之间同步这样的对象(也许有一个更好的方法,而不是仅仅使这个队列全局化)?在
EDIT1-以下是类:
A类:
^{pr2}$B类:
from utils import messenger
class Bar():
[...]
def bar():
[...]
while True:
print(str(m.get()))
EDIT2:既然我现在对我的问题有了更好的理解,这里有一个更新:
这两个类都作为不同的程序在不同的进程中运行(这可以解释为什么不共享全局变量:)。在
所以问题仍然存在:如何在两个不同的程序之间同步?我想到的唯一解决方案是在磁盘上创建一个文件,并在进程之间读取它,但它似乎非常不可靠(锁等),而且速度很慢。在
你能给我推荐不同的方法吗?在
好的,我用Zero MQ库解决了这个问题。在
节点A,发布者:
节点B,接收方:
^{pr2}$这个设置实现了我想要的,也就是说,它将信号从一个程序传输到另一个程序,并且它在相当好的时间内完成(这个非常简单的消息,两个整数的元组,大约在0.5毫秒内发送)。在
两件重要的事:
在多个实例(不同的类,同一个类,无论是什么)之间共享任何对象的方法都是相同的:将对象传递到每个实例的构造函数中。例如:
现在}都有相同的
bar1
、bar2
、bar1.foo
、和{m
对象。在相关问题 更多 >
编程相关推荐