Why does celery return a KeyError when executing my task?

22,628

In the celery output, you see that the task that gets picked up is

tournaments.tasks.notify_match_creation (#1)

and in your key error it is

KeyError: 'apps.tournaments.tasks.notify_match_creation'

before you call the celery task, make sure that it is imported with the same name (structure) as it is in the celery task that gets picked up (#1). Please refer to the link from celery docs for getting your relative imports rights.

one possible solution, when you launch celery - try

celery worker -A apps.tournaments.tasks.notify_match_creation

this could align your task names

Share:
22,628
Nathaniel Tucker
Author by

Nathaniel Tucker

Updated on November 24, 2020

Comments

  • Nathaniel Tucker
    Nathaniel Tucker over 3 years

    I keep getting this keyError. I am sending strings and id (integers) to the task function, so I don't think it is serialization issue. Also it says the keyerror is on the path to the function itself, not the contents. Please help.

    Tasks.py

    from celery.decorators import task
    from notification import models as notification
    
    @task(ignore_result=True)
    def notify_match_creation(match, home_team, away_team, home_team_captain, away_team_captain):
        notification.send(User.objects.filter(profile__teams__pk__in=(home_team, away_team)),
                          "tournaments_new_match",
                          {'match': unicode(match),
                           'home_team_captain': home_team_captain,
                           'away_team_captain': away_team_captain,
                           })
    

    Relevant settings

    CELERY_RESULT_BACKEND = "database"
    CELERY_RESULT_DBURI = "postgresql://user:pass@localhost/ahgl"
    BROKER_HOST = "localhost"
    BROKER_PORT = 5672
    BROKER_USER = "guest"
    BROKER_PASSWORD = "guest"
    BROKER_VHOST = "/"
    

    Celery output:

    [Tasks]

      . apps.tournaments.tasks.notify_match_creation
      . tournaments.tasks.notify_match_creation
    [2012-02-25 02:34:06,209: WARNING/MainProcess] celery@NATTOWER has started.
    [2012-02-25 02:34:06,477: WARNING/PoolWorker-4] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn
    ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
      warnings.warn("Using settings.DEBUG leads to a memory leak, never "
    [2012-02-25 02:34:06,479: WARNING/PoolWorker-2] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn
    ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
      warnings.warn("Using settings.DEBUG leads to a memory leak, never "
    [2012-02-25 02:34:06,523: WARNING/PoolWorker-3] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn
    ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
      warnings.warn("Using settings.DEBUG leads to a memory leak, never "
    [2012-02-25 02:34:06,566: WARNING/PoolWorker-1] E:\Webdesign\ahgl\ENV\lib\site-packages\djcelery\loaders.py:84: UserWarn
    ing: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
      warnings.warn("Using settings.DEBUG leads to a memory leak, never "
    [2012-02-25 02:34:31,520: INFO/MainProcess] Got task from broker: apps.tournaments.tasks.notify_match_creation[4dbd6258-
    5cee-49e9-8c8a-2d2105a2d52a]
    [2012-02-25 02:34:31,569: ERROR/MainProcess] Task apps.tournaments.tasks.notify_match_creation[4dbd6258-5cee-49e9-8c8a-2
    d2105a2d52a] raised exception: KeyError('apps.tournaments.tasks.notify_match_creation',)
    Traceback (most recent call last):
      File "E:\Webdesign\ahgl\ENV\lib\site-packages\celery\concurrency\processes\pool.py", line 211, in worker
        result = (True, func(*args, **kwds))
      File "E:\Webdesign\ahgl\ENV\lib\site-packages\celery\worker\job.py", line 50, in execute_and_trace
        task = tasks[name]
    KeyError: 'apps.tournaments.tasks.notify_match_creation'
    [2012-02-25 02:38:29,773: WARNING/MainProcess] celeryd: Hitting Ctrl+C again will terminate all running tasks!
    [2012-02-25 02:38:29,773: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess)
    [2012-02-25 02:38:31,779: INFO/MainProcess] process shutting down
    
  • nicorellius
    nicorellius almost 2 years
    I must say, after struggling with this for days, your answer offered the most "clues" compared to all others I've seen. The Celery docs seem haphazard and very inconsistent so they weren't helpful. Thanks for your great insight.