【问题标题】:Problems with celery + celery workers芹菜+芹菜工人的问题
【发布时间】:2020-07-31 22:56:36
【问题描述】:

所以我对 celery 完全陌生,我一直在尝试按照文档中的教程进行操作,但遇到了问题。当我无法访问芹菜工人的结果时,就会出现问题。这是我在名为tasks.py 的文件中的代码(我有rabbitMQ 设置):

from celery import Celery

app = Celery('tasks', backend='rpc://', broker='amqp://localhost')


@app.task
def adding(x, y):
    return x + y

我用这个命令运行一个工人:

celery -A tasks worker --loglevel=info

运行该命令后,这是输出代码:


 -------------- celery@Tims-PC v4.4.6 (cliffs)
--- ***** -----
-- ******* ---- Windows-10-10.0.19041-SP0 2020-08-01 00:38:28
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x43bbcd0
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     rpc://
- *** --- * --- .> concurrency: 12 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . tasks.adding

[2020-08-01 00:38:28,270: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2020-08-01 00:38:28,406: INFO/MainProcess] mingle: searching for neighbors
[2020-08-01 00:38:28,804: INFO/SpawnPoolWorker-3] child process 14948 calling self.run()
[2020-08-01 00:38:28,811: INFO/SpawnPoolWorker-8] child process 4396 calling self.run()
[2020-08-01 00:38:28,813: INFO/SpawnPoolWorker-5] child process 488 calling self.run()
[2020-08-01 00:38:28,814: INFO/SpawnPoolWorker-7] child process 15252 calling self.run()
[2020-08-01 00:38:28,814: INFO/SpawnPoolWorker-1] child process 9816 calling self.run()
[2020-08-01 00:38:28,817: INFO/SpawnPoolWorker-4] child process 21044 calling self.run()
[2020-08-01 00:38:28,822: INFO/SpawnPoolWorker-6] child process 1052 calling self.run()
[2020-08-01 00:38:28,826: INFO/SpawnPoolWorker-11] child process 20656 calling self.run()
[2020-08-01 00:38:28,832: INFO/SpawnPoolWorker-2] child process 21240 calling self.run()
[2020-08-01 00:38:28,839: INFO/SpawnPoolWorker-9] child process 3036 calling self.run()
[2020-08-01 00:38:28,847: INFO/SpawnPoolWorker-10] child process 13052 calling self.run()
[2020-08-01 00:38:28,847: INFO/SpawnPoolWorker-12] child process 17780 calling self.run()
[2020-08-01 00:38:29,333: INFO/SpawnPoolWorker-13] child process 10320 calling self.run()
[2020-08-01 00:38:29,333: INFO/SpawnPoolWorker-14] child process 22176 calling self.run()
[2020-08-01 00:38:29,335: INFO/SpawnPoolWorker-15] child process 13656 calling self.run()
[2020-08-01 00:38:29,664: INFO/MainProcess] mingle: all alone
[2020-08-01 00:38:29,671: WARNING/MainProcess] c:\users\timothee legros\pycharmprojects\celerytesting\venv\lib\site-packages\kombu\pidbox.py:74: UserWarning: A node named celery@Tims-P
C is already using this process mailbox!

Maybe you forgot to shutdown the other node or did not do so properly?
Or if you meant to start multiple nodes on the same host please make sure
you give each node a unique node name!

  warnings.warn(W_PIDBOX_IN_USE.format(node=self))
[2020-08-01 00:38:29,677: INFO/MainProcess] celery@Tims-PC ready.

一旦在这里我不能输入任何东西,并且 ctrl-c 只会打印我应该再次按 ctrl-c 退出,但是当我做任何事情时什么都没有发生。这不是我的主要问题。我的主要问题是当我使用 python 控制台来使用 worker 时:

from tasks import adding
result = adding.delay(3, 4)

该代码返回一个 AsyncResult 但发生了两件事:

  1. 原始终端窗口中没有更新任何信息以指示任何工作人员处理了任务并且
  2. 当我尝试访问这样的结果时:
result.get()

python 控制台冻结,我不能再输入或任何东西。为了重新获得对 python 控制台的控制,我必须 ctrl-c 引发 socket.timeout 错误。

有人想解决我的问题吗?随处可见的教程表明,当任务运行时,worker 最初启动的原始终端窗口应该更新,result.get() 应该返回任务返回的数据。

【问题讨论】:

    标签: python celery


    【解决方案1】:

    因为我可以在您的工作控制台上看到这条线 -

    task events: OFF (enable -E to monitor tasks in this worker)
    

    我猜你应该尝试使用-E 选项运行你的celery-worker,如下所示:

    celery -A tasks worker --loglevel=info -E
    

    我不太确定,但你可以试一试。


    您也可以在这里参考我的答案 - 用于存储您的任务结果:https://*.com/a/62387375/6490744

    【讨论】: