는 질문플라스크에서 셀러리 작업자에게 인터럽트를 보내는 방법은 무엇입니까?
나는이 tutorial에서처럼 플라스크 응용 프로그램에서 셀러리 노동자로부터의 상태에 액세스하는 방법에 대한 몇 가지를 읽었습니다,하지만 당신은 다른 길을 갈 수 있습니까? 시작된 후 인터럽트를 보내거나 셀러리 작업자에게 인트로 스펙 션을 받으시겠습니까?
약 signals에 대해 읽었지만 아직 이해하지 못하거나 내가 찾던 내용이 아닙니다. 아마 둘 다.
내가 킥오프 셀러리를 사용하고
은 장기 실행중인 MQTT 주제로 구독 루프를, 내가 수 있도록하고 싶습니다 배경도 다른 엔드 포인트에서 해당 프로세스/가입에 종료하기 내 플라스크 응용 프로그램. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 또는 방법?
예제 코드
from flask import Flask
from celery import Celery
import time
app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
@celery.task(bind=True)
def test_loop(self):
i=0
running = True
while running:
i = i+1
print "loop running %d" % i
time.sleep(1)
@app.route('/')
def index():
return 'index page'
@app.route('/start')
def start():
global task
task = test_loop.delay()
return "started loop"
@app.route('/stop')
def stop():
global task ### What I'm having trouble with
task.running = False ### How can I interrupt/introspect into the task?
return "stopped loop"
TL/
DR은이 시작 됐어요 후 셀러리 노동자에 반성을 인터럽트를 보내거나 얻을 수있는 방법이 있나요? 플라스크에서 셀러리 작업자로 시작된 장기 실행 루프를 어떻게 중지 할 수 있습니까?
굉장히 잘 될 것 같습니다. 나는 또한 셀러리가 처음에는 과잉이라고 생각했지만, 멀티 프로세싱을 할 수 없었다. 나의 최종 목표는 바베큐를 피우면서 무선 바베큐 온도계의 온도 판독 값을 수집, 기록, 플롯 및 분석하는 것입니다. 일반적으로 세션은 수 시간에서 12 시간 이상까지 걸립니다. 수신 된 데이터를 MQTT 메시지로 출력 할 수있는 [rtl433] (https://github.com/merbanan/rtl_433)의 수치를 받았습니다. 지금 당장은 항상 Raspberry Pi에서 실행 중이므로 RTLSDR 하드웨어의 종속성을 웹 서버에서 분리 할 수 있습니다. – washer
웹 서버에서 MQTT 주제를 구독하고 새 메시지를 JSON 파일에 작성합니다. 그것은 위의 코드에서'test_loop'에 의해 조롱 된 장기 실행 작업입니다. Flask에서 로그 경로 및 파일 이름과 같은 일부 구성을 전달할 수 있고 쓰기 시작/중지시기를 제어 할 수 있기를 원합니다. MQTT 클라이언트 (필자는 [paho-mqtt] (https://pypi.python.org/pypi/paho-mqtt/1.1)를 사용하여 연결을 설정하고'while True : time.sleep (1))'메시지를 기다리는 중, 장기 실행 작업의 대안이 확실하지 않습니다. 더 좋은 방법이 있습니까? – washer