2010-04-22 13 views

Odpowiedz

2

Twoje pytanie jest nieco dwuznaczne, ale jestem przy założeniu, znaczy chcesz napisać demona Pythona, który będzie przetwarzać zadania, które trafiają w kolejce. Jeśli nie, proszę powiedz tak bardzo. :-)

Słyszałem wiele wspaniałych rzeczy o Redis. Ludzie z github zbudowali resque jako demon przetwarzania zadań dla Ruby. Jeśli jesteś językiem elastycznym, możesz go po prostu użyć, ale jeśli nie, możesz emulować go w tak dużej lub małej głębi, jak chcesz, korzystając z redis jako systemu kolejki. W zależności od tego, jak jest to możliwe do zainstalowania i rozszerzenia, może to być naprawdę prosta rzecz do wdrożenia.

Inną opcją natknąłem po pewnym więcej googling jest redqueue. Wygląda na to, że może już zaimplementować większość kolejki zadań.

Jeśli używasz Django, można rozważyć projekt Celery. Jest to system kolejki zadań oparty na RabbitMQ, który jest kolejnym serwerem kolejkowania z doskonałymi recenzjami.

Jeśli chodzi o tworzenie demona w Pythonie, istnieje wiele opcji. Możesz spojrzeć na to page on activestate, co jest dobrym początkiem. Co więcej, możesz użyć python-daemon, aby zrobić to za ciebie. Ale jeśli użyjesz jednej z powyższych opcji lub beanstalkd zgodnie z poleceniem mczepiel, prawdopodobnie nie będziesz musiał uruchamiać procesu jako demon.

+0

Widziałem python-daemona, czy jest wystarczająco stabilny? – Timmy

+0

Wierzę, że tak, ale nie mam czasu, aby przeczytać jego kod lub cokolwiek, więc nie mogę być pewny. – Benson

1

mam niedawno (w tym tygodniu) zaimplementował kolejkę w RabbitMQ z demonem Pythona, pobierającym informacje i przechowującym je w bazie danych (przy użyciu Django ORM). Demon ma bufor pośredni, więc będzie trochę czekać i zapisywać w bazie danych partiami, zamiast pisać za każdym razem, gdy pojawi się mała wiadomość.

Zrobiłem integracji z kolejki stosując ten mały flopsy moduł, który jest łatwy do skonfigurowania. Jedyny problem, jaki mam, to móc ustawić limit czasu oczekiwania na wiadomość, ponieważ moduł nie ma do tego jasnego sposobu. Po chwili grania w interaktywną powłokę i zrobieniu kilku dir() udaje mi się dostać do obiektu socket i ustawić limit czasu.

Rozważam również Celery, ale wydaje się, że bardziej koncentruję się na wewnętrznym użyciu RabbitMQ, aby umożliwić uruchamianie zadań (okresowo lub asynchronicznie), co więcej, używając kolejki do komunikacji z innymi systemami. W naszym przypadku kolejka może być zasilana zarówno przez systemy Python, jak i Ruby.

Po zakończeniu procesu, wprowadziłem pewne poprawki, aby umożliwić uruchamianie go jako demona (głównie przechowywanie standardowego wyjścia do pliku w celu umożliwienia łatwego logowania), a następnie utworzyć skrypt bash, który uruchamia polecenie start-stop-daemon . I już po mniej więcej ten schema odkryłem python-daemon tylko około jednego dnia późno, więc po zakończeniu pracy nie ma sensu ponowne go, ale może to ma większy sens dla projektu Pythona.