戏剧化不会在队列中添加任务

2024-04-20 09:18:10 发布

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

我尝试从我的Falcon API方法运行一些戏剧演员,如下所示:

def on_post(self, req, resp):
    begin_id = int(req.params["begin_id"])
    count = int(req.params["count"])

    for page_id in range(begin_id, begin_id + count):
        process_vk_page.send(f"https://vk.com/id{page_id}")

    resp.status = falcon.HTTP_200

我的代码到达“send”方法,通过循环没有任何问题。但是队列中没有新任务!Actor本身不被调用,我的代理中的“default”队列是空的。如果我设置了自定义队列,它仍然是空的。我的演员是这样的:

^{pr2}$

经纪人在哪里

broker = RabbitmqBroker(url="amqp://guest:guest@rabbitmq:5672")

RabbitMQ日志显示它连接良好

我在调试器中做了一些额外的研究。它很好地接收到消息(这是要发送给代理的),并且broker.enqueue输入带选项的Actor.send_()没有返回异常,尽管我无法真正了解它的内部逻辑。我真的不知道为什么会失败,但肯定是RabbitmqBroker.enqueue()这是导致问题的原因。在

代理是erlang22.2.1上的RabbitMQ 3.8.2,在Docker中从RabbitMQDocker Hub image运行,默认设置为。戏剧版是1.7.0。在

在RabbitMQ日志中,只有在应用程序启动时到代理程序的连接,在我关闭它时断开连接,如下所示:

2020-01-05 08:25:35.622 [info] <0.594.0> accepting AMQP connection <0.594.0> (172.20.0.1:51242 -> 172.20.0.3:5672)
2020-01-05 08:25:35.627 [info] <0.594.0> connection <0.594.0> (172.20.0.1:51242 -> 172.20.0.3:5672): user 'guest' authenticated and granted access to vhost '/'
2020-01-05 08:28:35.625 [error] <0.597.0> closing AMQP connection <0.597.0> (172.20.0.1:51246 -> 172.20.0.3:5672):
missed heartbeats from client, timeout: 60s

代理在主包的__init__.py中定义,并在子包中导入。我不确定在所有函数的decorator中指定相同的代理实例是否合适,但是文档中没有禁止它的内容。我想这没关系,因为如果我为每个演员创建一个新的经纪人,它仍然不起作用。在

我试着把Redis设为经纪人,但我还是遇到了同样的问题。在

这可能是什么原因?在


Tags: 方法sendid代理队列countpagerabbitmq
1条回答
网友
1楼 · 发布于 2024-04-20 09:18:10

最有可能的问题是您没有告诉工人使用哪个代理,因为您没有声明默认代理。在

您没有提到您的文件在应用程序中是如何布局的,但是,假设您的代理在tasks.py内被定义为broker,那么您必须让您的工作人员这样了解它:

dramatiq tasks:broker

有关更多信息和模式,请参阅dramatiq help末尾的示例。在

相关问题 更多 >