皮卡消费者作为一个Python进程(多进程)

2024-03-29 00:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将示例Pika Async consumer(http://pika.readthedocs.io/en/0.10.0/examples/asynchronous_consumer_example.html)用作多处理进程(通过使exampleCustomer类的子类多处理过程). 然而,我遇到了一些问题,优雅地关闭了所有的东西。在

例如,我定义了如下过程:

for k, v in queues_callbacks.iteritems():
        proc = ExampleConsumer(queue, k, v, rabbit_user, rabbit_pw, rabbit_host, rabbit_port)

“queues\u callbacks”基本上只是exchange的字典:callback_函数(理想情况下,我希望能够用这种架构连接到多个交换机)。在

然后我用普通的python方法处理启动进程:

^{pr2}$

当我试图阻止一切的时候,问题就来了。假设我已经重写了“terminate”方法来调用使用者的“stop”方法,然后继续进行正常的进程终止。有了这个结构,我得到了一些奇怪的属性错误

Traceback (most recent call last):
File "/Users/christopheralexander/PycharmProjects/new_bot/abstract_bot.py", line 154, in <module>
main()
File "/Users/christopheralexander/PycharmProjects/new_bot/abstract_bot.py", line 150, in main
mybot.start()
File "/Users/christopheralexander/PycharmProjects/new_bot/abstract_bot.py", line 71, in start
self.stop()
File "/Users/christopheralexander/PycharmProjects/new_bot/abstract_bot.py", line 53, in stop
self.__stop_consumers__()
File "/Users/christopheralexander/PycharmProjects/new_bot/abstract_bot.py", line 130, in __stop_consumers__
self.consumers[0].terminate()
File "/Users/christopheralexander/PycharmProjects/new_bot/rabbit_consumer.py", line 414, in terminate
self.stop()
File "/Users/christopheralexander/PycharmProjects/new_bot/rabbit_consumer.py", line 399, in stop
self._connection.ioloop.start()
AttributeError: 'NoneType' object has no attribute 'ioloop'

就好像这些属性在某个时候消失了。在上面的特定情况下,_connection被初始化为None,但在消费者启动时设置。但是,当调用“stop”方法时,它已经恢复为None(没有设置任何操作)。我还观察到了其他奇怪的行为,比如当事情似乎被调用了两次(即使“停止”被调用了一次)。关于这里发生了什么有什么想法,或者这不是设计这个的正确方法吗?在

谢谢!在


Tags: 方法inpyselfabstractnewconsumerbot