2011-02-24 8 views
2

데이터베이스에 작업을 생성하고 저장하는 Django 웹 응용 프로그램이 있습니다. 모든 직업에 대해 전자 메일을 보내고 다른 시스템으로 데이터를 보내야합니다. 비동기로 만들고 싶습니다.Python/Django AMQP?

이와 같은 작업을 수행하는 데 권장되는 방법은 무엇입니까?

  • 신뢰할 수 있어야합니다 (실수로 서비스가 중지되면 작업을 놓치지 마십시오).
  • 문제가 발생하면 로그를 쉽게 찾을 수 있어야합니다.
  • 나는 작업을 처리 할 더 많은 작업자를 쉽게 추가 할 수 있기를 원합니다.

  • 작업 대기열이 동일한 데이터베이스 테이블 인 경우 데이터베이스의 상태를 변경하여 작업을 쉽게 취소 할 수 있습니다.

  • 아마도 솔루션이 장고 프레임 워크와 어떻게 든 관련이 있다면 좋을까요?

답변

6

나는 http://celeryproject.org/을 사용하여 조사 할 것이고, 귀하의 경우에는 장고 프로젝트 내에서 샐러리를 사용하는 것은 꽤 간단해야하지만 https://github.com/ask/django-celery을 사용하여 기존 응용 프로그램과의 통합을 단순화 할 수 있습니다.

셀러리는 작업자 컴퓨터에서 비동기 적으로 실행되어야하는 작업을 위해 함수/클래스 기반 추상화를 제공합니다. 여러 작업자 시스템을 보유하고 작업자를 동적으로 추가 할 수 있습니다. 모든 것은이 RabbitMQ에 의해 제공됩니다 (www.rabbitmq.com) 그래서 당신의 장고 응용 프로그램은 기본적으로 같은 수행하여 대기열에 작업을 넣어 것입니다 : 당신은 당신이 할 수있는 완료하는 작업에 대기 할 경우

from mycelerytasks import send_email 

... 

deferred_result = send_email.apply_async(*args, **kwargs) 

deferred_result.wait()하지만 귀하의 경우에는 그냥 버리고보기가 완료되어 사용자가 답변을 기다리지 않아도됩니다.

1

나는 이것이 당신이 원하는 것인지는 모르겠지만, 파이썬 스크립트를 실행하면서, 내 리눅스 서버에서주기적인 cron 작업을 수행한다. 이것은 아마도

import sys 
import os 
sys.path.append(PATH_TO_PROJECT_DIR) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

입니다 :

당신은 너무처럼 sys.path에 목록을 조작하여 파이썬 스크립트에서 프로젝트의 모듈 및 설정에 액세스 할 수 있습니다 (예약 된 작업 창에 해당 될 것이다) 약간의 생생한 솔루션으로 로깅, 작업 대기열 등을 정리하는 것은 사용자의 몫입니다. 그러나 이메일을 보내는 것과 같은 간단한 집을 유지하기에는 상당히 효과적이며 구현하기 쉽습니다.

관련 문제