【发布时间】:2016-06-22 10:19:43
【问题描述】:
我遇到了一个问题,我设置了多个使用扭曲库从不同队列消费的消费者。这一切都很好并且工作正常,但是它似乎并没有继续执行主程序,而是在我调用 reactor.run()
这是我实际调用消费者的主要代码:
cc = InitSetup()
AsyncConsumerSetup(DeviceFeaturesConsumer('outboundMessaging', 'messaging', 'outbound', ws, 'registeredCallback', cc, connection), cc)
reactor.run()
print "starting to receive device"
ws.client.on('newDevice', receive_device)
print "end receive device"
这里是InitSetup和AsyncConsumerSetup的方法:
def InitSetup():
parameters = ConnectionParameters()
cc = protocol.ClientCreator(reactor,
TwistedProtocolConnection,
parameters)
return cc
def AsyncConsumerSetup(consumer, cc):
try:
d = cc.connectTCP("127.0.0.1", 5672)
d.addCallback(lambda protocol: protocol.ready)
d.addCallback(consumer.on_connected)
d.addErrback(log.err)
except Exception as e:
print e
我对 twisted 的理解可能是错误的,但我原以为 print 语句和 ws.client.on 会被解雇。
【问题讨论】:
-
是的,您对 Twisted 的理解是错误的,但每个人在学习时都会遇到这种情况。一切都必须在
reactor循环内运行。 -
臭名昭著,我该如何将代码移入反应器。
-
您基本上必须确保所有逻辑在
reactor.run()之前执行。因此,如果您将reactor.run()移到最后,它应该可以正常工作。
标签: python python-2.7 asynchronous rabbitmq twisted