Проблемы с сельдереем + рабочие сельдерея - PullRequest
0 голосов
/ 01 августа 2020

Итак, я совершенно не знаком с сельдереем, и я пытался следовать руководству, которое есть в документации, и у меня возникли проблемы. Проблема возникает, когда я не могу получить доступ к результатам работы сельдерея. Это мой код в файле с именем 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 для использования воркера следующим образом:

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

Этот код возвращает AsyncResult, но происходит 2 вещи:

  1. Нет информации обновлено в исходном окне терминала, чтобы указать, что любой рабочий обработал задачу и
  2. , когда я пытаюсь получить доступ к результату следующим образом:
result.get()

Консоль python зависает и Я больше не могу печатать или что-то в этом роде. Чтобы восстановить контроль над консолью python, мне нужно нажать ctrl- c, что вызывает ошибку socket.timeout.

Есть ли у кого-нибудь идея исправить мою проблему? Повсюду учебники показывают, что исходное окно терминала, в котором работник был впервые запущен, должно обновляться при запуске задачи, а result.get () должен возвращать данные, возвращаемые задачей.

1 Ответ

1 голос
/ 03 августа 2020

Поскольку я вижу эту строку на вашей рабочей консоли -

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

Думаю, вам следует попробовать запустить свой celery-worker, используя параметр -E, например:

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

Я не уверен в этом, но вы можете попробовать.

Также вы можете сослаться на мой ответ здесь - для хранения результатов ваших задач: { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...