2013-12-16 3 views
3

Моя периодическая задача никогда не выполняется. Что мне не хватает? У меня работает RabbitMQ. У меня также есть цветок, и там появляется сельдерей.Непрерывная задача сельдерея не выполняется

Мне доставляет разочарование, что есть тонна примеров использования сельдерея с Django, но большинство из них - старые версии, которые, я считаю, не относятся к последней версии.

celery.py

from __future__ import absolute_import 

import os 

from celery import Celery 

from django.conf import settings 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'solar_secured.settings') 

app = Celery('solar_secured', broker='amqp://[email protected]//') 

# Using a string here means the worker will not have to 
# pickle the object when using Windows. 
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)) 

tasks.py

from asset_monitor.process_raw import parse_rawdata 

from datetime import timedelta 
from celery.task import periodic_task 

@periodic_task(run_every=timedelta(minutes=5)) 
def parse_raw(): 
    parse_rawdata() 

начал сельдерея рабочий

C:\dev\solar_secured>manage.py celeryd 
C:\Python27\lib\site-packages\celery-3.1.6-py2.7.egg\celery\apps\worker.py:159: 
CDeprecationWarning: 
Starting from version 3.2 Celery will refuse to accept pickle by default. 

The pickle serializer is a security concern as it may give attackers 
the ability to execute any command. It's important to secure 
your broker from unauthorized access when using pickle, so we think 
that enabling pickle should require a deliberate action and not be 
the default choice. 

If you depend on pickle then you should set a setting to disable this 
warning and to be sure that everything will continue working 
when you upgrade to Celery 3.2:: 

    CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] 

You must only enable the serializers that you will actually use. 


    warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED)) 

[2013-12-16 11:26:19,302: WARNING/MainProcess] C:\Python27\lib\site-packages\cel 
ery-3.1.6-py2.7.egg\celery\apps\worker.py:159: CDeprecationWarning: 
Starting from version 3.2 Celery will refuse to accept pickle by default. 

The pickle serializer is a security concern as it may give attackers 
the ability to execute any command. It's important to secure 
your broker from unauthorized access when using pickle, so we think 
that enabling pickle should require a deliberate action and not be 
the default choice. 

If you depend on pickle then you should set a setting to disable this 
warning and to be sure that everything will continue working 
when you upgrade to Celery 3.2:: 

    CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] 

You must only enable the serializers that you will actually use. 


    warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED)) 


-------------- [email protected] v3.1.6 (Cipater) 
---- **** ----- 
--- * *** * -- Windows-2008ServerR2-6.1.7601-SP1 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> broker:  amqp://[email protected]:5672// 
- ** ---------- .> app:   solar_secured:0x2cd4b00 
- ** ---------- .> concurrency: 8 (prefork) 
- *** --- * --- .> events:  OFF (enable -E to monitor this worker) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


C:\Python27\lib\site-packages\celery-3.1.6-py2.7.egg\celery\fixups\django.py:224 
: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setti 
ng in production environments! 
    warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 

[2013-12-16 11:26:20,512: WARNING/MainProcess] C:\Python27\lib\site-packages\cel 
ery-3.1.6-py2.7.egg\celery\fixups\django.py:224: UserWarning: Using settings.DEB 
UG leads to a memory leak, never use this setting in production environments! 
    warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 

[2013-12-16 11:26:20,512: WARNING/MainProcess] [email protected] ready. 

начал бить сельдерей

C:\dev\solar_secured>manage.py celery beat 
celery beat v3.1.6 (Cipater) is starting. 
__ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://[email protected]:5672// 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> celery.beat.PersistentScheduler 
    . db -> celerybeat-schedule 
    . logfile -> [stderr]@%INFO 
    . maxinterval -> now (0s) 
[2013-12-16 14:18:48,206: INFO/MainProcess] beat: Starting... 

ответ

1

Вы должны использовать планировщик для выполнения periodic tasks. Вы можете использовать Celery's Beat, который является планировщиком по умолчанию. Используйте следующую команду для использования бита python manage.py celery worker -B

+0

Когда я пытался начать биение сельдерея, было ошибкой сказать, что процесс уже запущен из-за наличия файла celerybeat.pid. Когда я удалил этот файл и выполнил команду manage.py celery, мои задания начали запускаться по расписанию. Формат, который вы используете выше с опцией -B, не работает с последней версией сельдерея. – Adam

Смежные вопросы