셀러리를 처음 사용하는 것은 사실입니다. 솔직히 말해서 나는 올바르게하고 있는지 잘 모르겠습니다. 내 시스템은 Windows에서 실행되어야하므로 RabbitMQ를 브로커로 사용하고 있습니다.Django Celery - RabbitMQ를 사용하여 객체를 뷰와 태스크 사이에 전달
개념 증명으로 하나의 작업이 값을 설정하고 다른 작업이 값을 읽으며 특정 작업을 수행 할 때 개체의 현재 값을 표시하려는 단일 개체를 만들려고합니다. url. 그러나 모든 문제 사이에 개체를 공유하는 데 문제가 있습니다.
이
내 celery.py입니다from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE','cesGroundStation.settings')
app = Celery('cesGroundStation')
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.pyfrom celery import shared_task
from time import sleep
from scheduler.schedulerQueue import SchedulerQ
schedulerQ = SchedulerQ()
@shared_task()
def SchedulerThread():
print ("Starting Scheduler")
counter = 0
while(1):
counter += 1
if(counter > 100):
counter = 0
schedulerQ.setItem(counter)
print("In Scheduler thread - " + str(counter))
sleep(2)
print("Exiting Scheduler")
@shared_task()
def RotatorsThread():
print ("Starting Rotators")
while(1):
item = schedulerQ.getItem()
print("In Rotators thread - " + str(item))
sleep(2)
print("Exiting Rotators")
@shared_task()
def setSchedulerQ(schedulerQueue):
schedulerQ = schedulerQueue
@shared_task()
def getSchedulerQ():
return schedulerQ
입니다
class SchedulerQ():
item = 0
def setItem(self, item):
self.item = item
def getItem(self):
return self.item
내 apps.py에서 내 작업을 시작 ...이 작업에 적합한 장소인지 확실하지/근로자는 내가 sep에서 노동자를 시작할 때까지 작동하지 않는 것 같습니다 내가 콘솔 celery -A cesGroundStation -l info
을 실행 arate 콘솔. Celery command output
def schedulerQ():
queue = getSchedulerQ.delay()
return HttpResponse("Your list: " + queue)
응용 프로그램이 오류없이 실행하는 장고는 그러나 "셀러리 -A의 cesGroundStation -l 정보"에서 내 출력은 이것이다 : 내 views.py에서
from django.apps import AppConfig
from scheduler.schedulerQueue import SchedulerQ
from scheduler.tasks import SchedulerThread, RotatorsThread, setSchedulerQ, getSchedulerQ
class SchedulerConfig(AppConfig):
name = 'scheduler'
def ready(self):
schedulerQ = SchedulerQ()
setSchedulerQ.delay(schedulerQ)
SchedulerThread.delay()
RotatorsThread.delay()
나는이 있습니다
먼저 여러 개의 "SchedulerThread"작업을 시작한 것 같습니다. 둘째로 "SchedulerQ"개체는 업데이트 된 값을 읽지 않으므로 Rotators로 전달되지 않습니다.
그리고이 URL로 이동하면되는 I이 오류 얻을 views.schedulerQ보기 보여줍니다 Django views error
나는 매우, 파이썬, 장고와 일반적으로 웹 개발, 그래서 아주 작은 경험을 가지고있다가 그 마지막 오류로 어디서 시작해야할지 모르겠다. 해결책은 Redis를 사용하여 개체를보기에 전달하는 것이지만 RabbitMQ를 사용하여 개체를 전달하는 방법을 알지 못합니다. 나중에 schedulerQ 객체가 큐를 구현하고 스케쥴러와 로테이터가 큐의 내용을 보여주는 뷰와 함께 더 많은 프로듀서/소비자 동적 역할을 할 것이므로 데이터베이스를 사용하는 것은 리소스 집약적 일 수 있다고 생각합니다. 이 작업을 모든 작업에서 어떻게 공유 할 수 있습니까? 이것이 올바른 접근 방법일까요?