MikkoP
MikkoP

Reputation: 646

Celery Beat Windows Simple Example (not with Django)

I'm really struggling to set up a periodic task using Celery Beat on Windows 7 (unfortunately that is what I'm dealing with at the moment). The app that will be using celery is written with CherryPy, so the Django libraries are not relevant here. All I'm looking for is a simple example of how to start the Celery Beat Process in the background. The FAQ section says the following, but I haven't been able to actually do it yet:

Windows

The -B / –beat option to worker doesn’t work?¶

Answer: That’s right. Run celery beat and celery worker as separate services instead.

My project layout is as follows:

proj/
    __init__.py (empty)
    celery.py
    celery_schedule.py
    celery_settings.py (these work
    tasks.py

celery.py:

from __future__ import absolute_import

from celery import Celery
from proj import celery_settings
from proj import celery_schedule

app = Celery(
    'proj',
    broker=celery_settings.BROKER_URL,
    backend=celery_settings.CELERY_RESULT_BACKEND,
    include=['proj.tasks']
)

# Optional configuration, see the application user guide.
app.conf.update(
     CELERY_TASK_RESULT_EXPIRES=3600,
     CELERYBEAT_SCHEDULE=celery_schedule.CELERYBEAT_SCHEDULE
)

if __name__ == '__main__':
    app.start()

tasks.py

from __future__ import absolute_import

from proj.celery import app


@app.task
def add(x, y):
    return x + y

celery_schedule.py

 from datetime import timedelta

 CELERYBEAT_SCHEDULE = {
     'add-every-30-seconds': {
          'task': 'tasks.add',
          'schedule': timedelta(seconds=3),
          'args': (16, 16)
     },
 }

Running "celery worker --app=proj -l info" from the command line (from the parent directory of "proj") starts the worker thread just fine and I can execute the add task from the Python terminal. However, I just can't figure out how to start the beat service. Obviously the syntax is probably incorrect as well because I haven't gotten past the missing --beat option.

Upvotes: 4

Views: 2287

Answers (1)

vsvs
vsvs

Reputation: 21

Just start another process via a new terminal window, make sure you are in the correct directory and execute the command celery beat (no '--' needed preceding the beat keyword).

If this does not solve your issue, rename your celery_schedule.py file to celeryconfig.py and include it in your celery.py file as: app.config_from_object('celeryconfig') right above your name == main

then spawn a new celery beat process: celery beat

Upvotes: 2

Related Questions