2015-02-03 3 views
0

작업을 예약 할 Rails 앱이 있습니다. 파이썬으로 작업자 프로그램을 작성하고 싶습니다. 서로 다른 두 언어간에 작업 대기열을 공유하는 좋은 방법은 무엇입니까? 내가 보았던 모든 큐 (Sidekiq, Resque, Celery)는 특정 언어로 보입니다.Ruby와 Python 응용 프로그램간에 백그라운드 작업 큐를 공유하는 방법

Ruby에서 파이썬으로 작성된 다른 프로세스 (예 : Kernel#exec or Kernel#system)를 작성하는 작업자를 작성하는 것이 좋습니다.

+0

rabbitmq를 사용해보십시오. 두 가지 모두에 클라이언트가 있습니다. – shevski

답변

0

Resque는 Redis의 루비 클라이언트 라이브러리입니다. Redis는 독립 실행 형 큐이며 개별 프로세스로 실행됩니다. 언어별로 다릅니다.

Resque (또는 다른 루비 Redis 라이브러리)를 사용하여 대기열에 작업을 추가하고 Python redis 라이브러리를 사용하여 대기열에서 작업하는 작업자를 제공 할 수 있습니다.

다른 대기열 소프트웨어를 사용할 수도 있습니다. 간단하지 않은 고성능 솔루션에서 작업을 포스트그레스 테이블에 남겨 둘 수 있습니다.

핵심은 작업의 설명을 일종의 외부 대기열 (Redis, postgres 테이블, rabbitmq, 다른 것)에 넣는 것이 핵심입니다. 그리고 다른 쪽은 외부 대기열에서 작업 설명을 가져 와서 실제로 실행합니다. 'job descriptions'은 키/값일 뿐이며, 값은 문자열이나 문자열 배열 등입니다. 이것은 마치 Resque로 인해 일어나는 일입니다.하지만 더 이상 마법 같은 것이 보이게 할 수도 있습니다.

Redis (또는 원하는 대기열 저장소)를 사용하여 실제로 작동하는 방식과 진행 상황을 이해하고 대기열 저장소와 상호 작용하기 위해 사용중인 라이브러리 (예 : Resque) 실제로 무슨 일이 일어나고 있는지 이해하고 적절하게 설정하고 필요할 때 디버깅 할 수 있도록 클라이언트 라이브러리가없는 큐 저장소에 대해 직접 코드를 작성하고 있습니다.

1

궁극적으로 Resque 큐 특정 형식 ("class"및 "args"의 해시)으로 JSON을받는 Redis 키 - 값지도입니다. 즉, Python Redis 클라이언트 또는 직접 명령 줄에서 Resque 대기열에 내용을 푸시 할 수 있습니다.

redis-cli rpush "resque:queue:myqueue" '{"class":"MyClass","args":["arg1"]}' 
관련 문제