我正在编写一个项目管道,使用Pika将项目丢弃到RabbitMQ队列。目前我正在使用阻塞/同步方法,这显然不是一个好主意。我想使用类似于this的异步方法,但我无法弄清楚如何将延迟任务添加到已经运行的反应堆。例如,pika连接的扭曲版本的示例代码显示了:
d = cc.connectTCP('hostname', 5672)
d.addCallback(lambda protocol: protocol.ready)
d.addCallback(run)
reactor.run() # Problem is, it's already running
有没有人有关于如何将延期任务添加到已经启动的反应堆的任何指针?
答案 0 :(得分:2)
通常,您可以在启动反应堆后使用任何Twisted API(有一些值得注意的例外,例如reactor.run
;)。启动某些异步操作的Twisted API很乐意针对正在运行的反应器(而不是尚未启动的反应堆)这样做。对于尚未启动的反应堆,他们也非常乐意这样做(尽管在反应堆启动前很少或根本没有进展)。
如果你有一些代码在反应堆正在运行的同一个线程中运行,你可以使用Twisted API(例如ClientCreator.connectTCP
作为你的例子似乎使用;但是,另外,看一下新的"端点" API,它们在各方面都基本上优于ClientCreator
并且它们可以正常工作。
如果他们没有正常工作,问题可能是他们没有做你期望他们做的事情,他们会报告你忽略的错误(作为问题中的示例似乎可以),或者代码实际上并不在与反应堆相同的线程中运行。