2013-12-16 150 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芹菜節拍時,我的作業開始按計劃運行。上述使用-B選項的格式不適用於最新版本的芹菜。 – Adam