2016-11-10 1 views
0

나는 Phalcon PHP 서버 측을 사용 중이며 doc으로 Beanstalk에 작업을 보냈다.PHP/Python Beanstalk 소켓 이벤트 작업

beanstalk 내의 모든 작업을 실행하려면 파이썬 스크립트가 있어야합니다. 이 스크립트는 기존 작업이 있는지 검색하고 실행합니다. 그러나이 순간 나는 리눅스 커맨드 라인으로이 스크립트를 실행한다.

그런 다음 작업을 생성하고 작업을 실행할 때 파이썬 스크립트를 자동으로 실행하고 싶습니다. 나는 소켓에 대해 생각했다.

Beanstalk 소켓 이벤트를 잡아 내 Python 스크립트를 실행할 때 잡을 수 있습니까?

답변

0

마지막으로 나는 토네이도 Beanstalkt와 파이썬 스크립트를 썼다.

여기 내 코드입니다.

import tornado 
import beanstalkt 

def show(msg, value, cb): 
    print(msg % value) 
    cb() 

def stop(): 
    client.close(ioloop.stop) 

def connect(s): 
    print('Connection established') 
    reserve() 

def reserve(): 
    client.reserve(callback=lambda s: show(
     "Reserved job %s", s, lambda: delete(s["id"]))) 

def delete(job_id): 
    client.delete(job_id, callback=lambda s: show(
     "Deleted job with id %d", job_id, reserve)) 

ioloop = tornado.ioloop.IOLoop.instance() 
client = beanstalkt.Client(host='my-server', port=11300) 
client.connect(callback=connect) 
client.watch("my-tube") 
ioloop.start() 

이 행은 내 beanstalk 서버에 대한 연결을 설정합니다. 연결 내가 connect 방법 내부 콜백을 사용하고 있는데 그 이유는 성공하면

client.connect(callback=connect) 
client.watch("my-tube") 
ioloop.start() 

나는 노동자를 시작합니다. watch 메서드는 내가 원하는 튜브에 초점을 맞추고 start 메서드는 I/O 비 블로킹 비동기 루프를 시작합니다.

connect 기능에서 나는 reserve 기능을 호출 할 것입니다. 예약 할 수있는 작업이없고 시간 초과가 없다면 reserve은 미래의 작업을 기다리고 콩 주머니로 트리거됩니다.

그 후 나는 reserve 함수 내에서 원하는 것을 줄 수 있습니다. 여기에 내 프로세스를 테스트하기위한 show 함수를 보냅니다. 내 인쇄 후 삭제 콜백을 호출하여 현재 작업을 삭제합니다.

희망이 있습니다.