2011-10-21 3 views
0

mod_wsgi를 사용하여 WSGI 응용 프로그램을 작성했습니다. 많은 동시 연결 기능을 원합니다. mod_wsgi는 각 요청에 대해 새로운 프로세스를 회전시켜 스레딩을 사용하지 못하도록합니다. 한 스레드에서 다른 스레드로 변경 사항을 알리는 데는 조건()을 사용합니다.Python threading. 여러 프로세스에서 수행 할 수있는 기능()

다른 실행중인 프로세스 (RPC, AMQP, d-bus, Jabber)간에 실시간 메시징을 제공하는 몇 가지 다른 방법이 있음을 알고 있지만 특별히 찾고있는 것은 한 가지 라이너에 가까운 것입니다. threading.wait() 및 threading.notifyAll().

mod_wsgi를 사용하지 않고 여러 스레드를 실행하고 있었을 때, 여기에 필자는 기본적으로 저에게 맞고 있습니다. 분명히 두 기능은 서로 다른 쓰레드에 의해 실행되었다 :

def put_value: 
    # user has given a new value 
    # update in DB, then notify any waiting threads 

    my_condition.acquire() 
    my_condition.notifyAll() 
    my_condition.release() 

def get_value: 
    # user has requested to receive a new value as of this point 
    # we will return a value as soon as we are notified it has changed 

    my_condition.acquire() 
    my_condition.wait() 
    my_condition.release() 
    # return some val out of the DB 

을 다시 한번, 내가 무엇을 찾고 있어요 것은 한 - 라이너 threading.wait()와 threading.notifyAll()에 가까운 무언가이다. 백그라운드에서 실행중인 일부 구성 및 설정을 설정하는 데는 신경 쓰지 않습니다. 그러나 계속 진행할 수 있다는 알림이 표시 될 때까지 요청 중간에 중지하고 대기하는 기능을 사용하는 상당한 양의 코드가 있습니다.

+0

mod_wsgi 모듈은 각 요청에 대해 새로운 프로세스를 시작하지 않습니다. 그러나 mod_wsgi의 특정 구성은 다중 프로세스이므로 요청이 매번 같은 프로세스로 진행되지 않을 수도 있습니다. mod_wsgi의 데몬 모드를 단일 프로세스의 기본값으로 사용하면이 문제가 발생하지 않습니다. –

답변

1

mod_wsgi 구성에서 processes = 1로 설정하십시오. 자세한 내용은 http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess을 참조하십시오.

+0

나는 그것을 보았다. 문제는 우리가 성장할 때 하나의 컴퓨터에서 하나의 프로세스로 제한하고 싶지 않다는 것이다. 그것은 확실히 해결책이며, 내가 원하는 것을 정확히 충족시키지 못할 것입니다. –

관련 문제