I followed the official [Celery 
guide](https://docs.celeryproject.org/en/stable/getting-started/next-steps.html#in-the-background)
 to learn, everything works well when using `celery -A proj worker -l info` to  
start the worker, however , if I run the worker in the background using `celery 
multi restart w1 -A proj -l info --logfile=./celery.log`, then I got 


    >>> from proj.tasks import add
    >>> add.delay().get(timeout=19)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python3.8/dist-packages/celery/result.py", line 230, 
in get
        return self.backend.wait_for_pending(
      File "/usr/local/lib/python3.8/dist-packages/celery/backends/base.py", 
line 660, in wait_for_pending
        meta = self.wait_for(
      File "/usr/local/lib/python3.8/dist-packages/celery/backends/base.py", 
line 696, in wait_for
        raise TimeoutError('The operation timed out.')
    celery.exceptions.TimeoutError: The operation timed out.
    >>>
So what's wrong ?

Test environment :

 - Python 3.8.2 
 - celery multi v4.4.7
 - rabbitmqctl version --->    3.8.2

and Project layout ([code 
files](https://github.com/celery/celery/files/5231502/proj.zip)):

> proj/__init__.py
>     /celery.py
>     /tasks.py

celery.py

    from __future__ import absolute_import, unicode_literals
    
    from celery import Celery
    
    app = Celery('proj',
                 broker='amqp://localhost',
                 # backend='db+sqlite:///results.sqlite',  # The backend 
argument, If you don’t need results, it’s better to disable them.  Results can 
also be disabled for individual tasks by setting the @task(ignore_result=True) 
option.
                 include=['proj.tasks'])  # The include argument is a list of 
modules to import when the worker starts. You need to add our tasks module here 
so that the worker is able to find our tasks.
    app.conf.CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite'
    
    if __name__ == '__main__':
        app.start()

tasks.py

    from __future__ import absolute_import, unicode_literals
    from .celery import app
    import datetime
    @app.task
    def add():
        return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")


The log info as the following , I googled , but didn't find a working solutions 
```
[2020-09-15 22:10:03,229: INFO/MainProcess] Connected to 
amqp://guest:**@127.0.0.1:5672//
[2020-09-15 22:10:03,238: INFO/MainProcess] mingle: searching for neighbors
[2020-09-15 22:10:04,260: INFO/MainProcess] mingle: all alone
[2020-09-15 22:10:04,273: INFO/MainProcess] w1@iZwz962a07bhoio77q4ewxZ ready.
[2020-09-15 22:10:10,625: ERROR/MainProcess] Received unregistered task of type 
'proj.tasks.add'.
The message has been ignored and discarded.

Did you remember to import the module containing this task?
Or maybe you're using relative imports?

Please see
http://docs.celeryq.org/en/latest/internals/protocol.html
for more information.

The full contents of the message body was:
'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]' 
(77b)
Traceback (most recent call last):
  File 
"/usr/local/lib/python3.8/dist-packages/celery/worker/consumer/consumer.py", 
line 562, in on_task_received
    strategy = strategies[type_]
KeyError: 'proj.tasks.add'

```
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to