繁体   English   中英

celery + celery 工人的问题

[英]Problems with celery + celery workers

所以我对 celery 完全陌生,我一直在尝试按照文档中的教程进行操作,但遇到了问题。 当我无法访问 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

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


 -------------- 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 控制台来使用工作人员时,如下所示:

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

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

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

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

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

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

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

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

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

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM