2012-06-22 4 views
9

웹 클라이언트 (Django) 및 원격 API (아마 독립 실행 형 데몬)와 함께 작동하는 시스템을 구축하고 있습니다. JavaScript와 같은 일부 이벤트 프레임 워크로 작업을 조정하는 것이 더 쉽다는 것을 알았습니다. 유감스럽게도 Django 신호는 동기식이므로 클라이언트에 대한 응답이 매우 느립니다. 또한 데몬이나 그 부분을 별도의 컴퓨터로 마이그레이션 할 수도 있지만 같은 방식으로 작동합니다 (RPC가 아니라 이벤트를 트리거하거나 메시지를 보내는 것). (이것은 Erlang의 접근 방식처럼 들릴 수 있습니다.)Python 용 이벤트 프레임 워크?

검증 된 방법을 사용하여 프로세스 간 통신 (예 : RabbitMQ)을 수행하고 최소한의 상용구가 필요한 프레임 워크가 있습니까?

André Paramés가 제안한 Twisted는 더 간단한 코드를 선호합니다. 이게 Twisted에서 할 수 있니?

from events_framework import subscribe, trigger 
from django.http import Client 
http_client = Client() # just a sample 

@subscribe('data_received'): 
def reply(data): 
    http_client.post('http://www.example.com', data) 
    trigger('data_resent', data) 

여기에 자세한 내용이 나와 있습니다. 일부 모델을 사용하고 다른 사람들에게 이벤트를 알리는 Django 뷰 파일이 있습니다. 무한히 실행되고 이벤트에 반응하는 독립형 데몬 스크립트가 있습니다.

이것은 단지 의사 코드인데, 나는 그것이 얼마나 쉬운지를 의미합니다.

# django_project/views.py (a Django views file) 
from events_framework import publish, subscribe 
from annoying import 

@subscribe('settings_updated') 
def _on_settings_update(event): # listens to settings_updated event and saves the data 
    Settings.object.get(user__id=event.user_id).update(event.new_settings) 

@render_to('form.html') 
def show_form(request): # triggers 'form_shown' event 
    publish('form_shown', {'user_id': request.user.id, 'form_data': request.GET}) 
    return {...} 


# script.py (a standalone script) 
from events_framework import publish, subscribe 

@subscribe('form_shown') 
def on_form_shown(event): # listens to form_shown event and triggers another event 
    pass 
    result = requests.get('third party url', some_data) 
    publish('third_party_requested', {'result': result}) 

다시 말하면 장고 신호만으로는이 작업을 수행 할 수 없습니다. 일부 이벤트는 네트워크를 통해 게시해야하며 일부 이벤트는 로컬이지만 비동기식이어야합니다. 경량 이벤트 구동 강한 구성 요소 아키텍처 파이썬 프로그래밍 언어에 대한 비동기 응용 프로그램 프레임 워크 :

from events_framework import Environment 
env = Environment() # will connect to default rabbitmq server from settings. 
+5

왜이 'javascript'에 태그를 지정 했습니까? 정말 관련이 없습니다. 이벤트 중심 프레임 워크에 관해서는 [Twisted] (http://twistedmatrix.com/trac/)를 보았습니까? –

+0

JS & Erlang 태그를 제거했습니다 ... –

+0

안녕하세요 세상의 예가 제가 머리를 긁적 거리게했습니다. 얼마나 많은 상용구 또는 이상한 코드가 필요합니까? –

답변

3

나는 RabbitMQ과 함께 Celery을 가장 성숙한 소프트웨어 조합으로 결정했으며, 나는 그것들을 고수 할 것입니다. 셀러리는 이벤트를 만드는 것뿐만 아니라 queue routingparallelization을 통해 유연한 전문화를 가능하게합니다.

4

확인 circuits처럼 뭔가를 인스턴스화 할 필요가있다.

+0

이 라이브러리/프레임 워크의 저자로서 저는 약간 편향되어 있습니다; 그럼에도 불구하고 회로는 구성 요소 아키텍처와 이벤트 중심 메시지 전달을 중심으로 설계되었습니다. - 제임스 밀스/프로 로직 –