[Python] Celery - worker only sometimes picks up tasks

Discussão em 'Python' iniciado por Stack, Julho 29, 2025.

  1. Stack

    Stack Membro Participativo

    I am building a lead generation portal that can be accessed online. Please don't mind the verbosity of the code, I'm doing a lot of debugging right now.

    My Celery worker inconsistently picks up tasks assigned to it, and I'm not sure why.

    The weird thing about this, is that sometimes it works 100% perfect: there never are any explicit errors in the terminal.

    I am currently in DEBUG = TRUE and REDIS as a broker!

    celery start worker terminal command and response

    celery -A mysite worker -l info --pool=solo
    -------------- celery@DESKTOP-OG8ENRQ v5.0.2 (singularity)
    --- ***** -----
    -- ******* ---- Windows-10-10.0.19041-SP0 2020-11-09 00:36:13
    - *** --- * ---
    - ** ---------- [config]
    - ** ---------- .> app: mysite:0x41ba490
    - ** ---------- .> transport: redis://localhost:6379//
    - ** ---------- .> results: redis://localhost:6379/
    - *** --- * --- .> concurrency: 12 (solo)
    -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
    --- ***** -----
    -------------- [queues]
    .> celery exchange=celery(direct) key=celery
    [tasks]
    . mysite.celery.debug_task
    . submit

    [2020-11-09 00:36:13,899: INFO/MainProcess] Connected to redis://localhost:6379//
    [2020-11-09 00:36:14,939: WARNING/MainProcess] c:\users\coole\pycharmprojects\lead_django_retry\venv\lib\site-packages\celery\app\control.py:48: DuplicateNodenameWarning: Received multiple replies from node name: celery@DESKTOP-OG8ENRQ.
    Please make sure you give each node a unique nodename using
    the celery worker `-n` option.
    warnings.warn(DuplicateNodenameWarning(

    [2020-11-09 00:36:14,939: INFO/MainProcess] mingle: all alone
    [2020-11-09 00:36:14,947: INFO/MainProcess] celery@DESKTOP-OG8ENRQ ready.



    views.py

    class LeadInputView(FormView):
    template_name = 'lead_main.html'
    form_class = LeadInput

    def form_valid(self, form):
    print("I'm at views")
    form.submit()
    print(form.submit)
    return HttpResponseRedirect('./success/')


    tasks.py

    @task(name="submit")
    def start_task(city, category, email):
    print("I'm at tasks!")
    print(city, category, email)
    """sends an email when feedback form is filled successfully"""
    logger.info("Submitted")
    return start(city, category, email)


    forms.py

    class LeadInput(forms.Form):
    city = forms.CharField(max_length=50)
    category = forms.CharField(max_length=50)
    email = forms.EmailField()

    def submit(self):
    print("I'm at forms!")
    x = (start_task.delay(self.cleaned_data['city'], self.cleaned_data['category'], self.cleaned_data['email']))
    return x


    celery.py

    from __future__ import absolute_import
    import os
    from celery import Celery
    from django.conf import settings

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
    app = Celery('mysite')

    app.config_from_object('django.conf:settings')
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


    @app.task(bind=True)
    def debug_task(self):
    print('Request: {0!r}'.format(self.request))



    settings.py

    BROKER_URL = 'redis://localhost:6379'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379'
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TIMEZONE = 'UTC'


    The runserver terminal will look something like this:

    I'm at views
    I'm at forms!
    <bound method LeadInput.submit of <LeadInput bound=True, valid=True, fields=(city;category;email)>>


    But the worker doesn't say that it picked up anything, just that "celery@DESKTOP-OG8ENRQ ready." Except, when it does work... for some reason? I'm at a loss!

    Continue reading...

Compartilhe esta Página