2016-10-26 8 views
1

저는 샐러리가 새롭습니다. 내 장고 프로젝트로 샐러리를 제대로 구성하려고합니다. 셀러리가 작동하는지 테스트하기 위해, 나는 2 초마다 "periodic_task"를 인쇄해야하는주기적인 작업을 만들었습니다. 불행히도 작동하지 않지만 오류는 발생하지 않습니다.셀러리의 간단한 주기적 작업이 작동하지 않지만 오류는 발생하지 않습니다.

1 설치된 rabbitmq

2Project/project/celery.py

from __future__ import absolute_import 

import os 

from celery import Celery 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 

from django.conf import settings # noqa 

app = Celery('project') 

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

@app.task(bind=True) 
def myfunc(): 
    print 'periodic_task' 

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

3Project/project/__init__.py

from __future__ import absolute_import 

from .celery import app as celery_app 

4

INSTALLED_APPS = [ 
    'djcelery', 
    ...] 
... 
... 

CELERYBEAT_SCHEDULE = { 
    'schedule-name': { 
         'task': 'project.celery.myfunc', # We are going to create a email_sending_method later in this post. 
         'schedule': timedelta(seconds=2), 
         }, 
    } 

그리고 python manage.py 전에 Settings.py, 나는 어떤 "periodic_task"2 초마다 ... 당신이 무엇을해야하는 지 알고 있나요 콘솔에 인쇄를 볼 수 없습니다 아직

celery -A project worker -l info를 실행?

편집 셀러리 콘솔 :

-------------- [email protected]_NB v3.1.23 (Cipater) 
---- **** ----- 
--- * *** * -- Windows-8-6.2.9200 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   dolava:0x33d1350 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results:  disabled:// 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . project.celery.debudeg_task 
    . project.celery.myfunc 

편집이 :

이길 노동자를 변경 한 후, 그것을 작동하는 것 같다. 2 초마다 (5 초로 변경됨) 문제가 발생하지만 작업 결과를 볼 수 없습니다. (나는 CELERYBEAT_SCHEDULE으로도 잘못된 경로를 아무것도 넣을 수 있습니다 그리고 어떤 오류가 발생하지 않습니다 ..)

나는에 myfunc에 코드를 변경 :

@app.task(bind=True) 
def myfunc(): 
    # notifications.send_message_to_admin('sdaa','dsadasdsa') 
    with open('text.txt','a') as f: 
     f.write('sa') 

하지만 난 아무 text.txt 볼 수 없습니다 .

> celery -A dolava beat -l info 
celery beat v3.1.23 (Cipater) is starting. 
__ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://guest:**@localhost:5672// 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> djcelery.schedulers.DatabaseScheduler 

    . logfile -> [stderr]@%INFO 
    . maxinterval -> now (0s) 
[2016-10-26 17:46:50,135: INFO/MainProcess] beat: Starting... 
[2016-10-26 17:46:50,138: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,433: INFO/MainProcess] DatabaseScheduler: Schedule changed. 

[2016-10-26 17:46:51,433: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,812: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:46:51,864: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:57,138: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:47:02,230: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
+0

실행? –

+0

@anonymous 예, RabbitMQ를 설치하기 전까지는 작동하지 않았습니다. 셀로리와 매우 혼란 스럽기 때문에 분명 할 수 있습니다. 나는 질문의 하단에 셀러리 콘솔의 일부를 추가했습니다. –

+0

또한 셀러리 작업 내에서 코드를 업데이트 할 때주의하십시오. 변경 사항이 –

답변

3

시도 RabbitMQ 서비스가 실행

$ celery -A project beat -l info

+0

도움이 될 것 같습니다. 셀러리 콘솔에서 각각 2 초 (또는 5 초로 변경)가 발생하는 것을 볼 수 있습니다. 문제는 myfunc가 아무런 영향을 미치지 않는 것입니다. 질문의 맨 아래에 콘솔 출력을 추가했습니다. –

+1

오, 나는 노동자 대신에 이것을 운영합니다. 한 번에 작업자와 비트를 모두 실행하려고 시도했을 때 작동했습니다. –