2012-05-06 3 views
1

어떻게 든 xmlrpc 클라이언트 요청을 취소 할 수 있습니까? 때로는 다른 스레드에서 내 작업을 취소 할 수있는 이벤트를 얻을 수 있습니다 ... 난 시간 초과의 일종을 의미하지 않는다xmlrpc 클라이언트 요청을 취소 하시겠습니까?

svr = xmlrpclib.ServerProxy('http://localhost:9092') 
svr.DoSomethingWhichNeedTime() 

:

하자가 하나 개의 스레드에서 내가 좋아하는 코드를 말한다. 그런 다음이 요청을 취소해야합니다.

나는 twisted으로 할 수 있다는 것을 알고 있지만, 표준 xmlrpclib로 할 수 있습니까?

답변

2

먼저 클라이언트 (xmlrpclib)가 아닌 서버 쪽에서 구현해야합니다. 단순히 XML-RPC 서버에 대한 HTTP 요청을 중단하면 서버에서 실행되는 긴 프로세스가 전혀 중단되지 않을 수도 있습니다. 그래서 xmlrpclib 그냥이 기능을 가질 수 없습니다.

이 동작을 구현하려면 두 가지 유형의 요청을 만들어야합니다. 첫 번째 유형의 요청은 서버에 긴 프로세스를 시작하도록 지시합니다. 백그라운드 (다른 스레드 또는 프로세스)에서 실행되어야하며 XML-RPC 서버는 응답 ("프로세스 시작!")을 클라이언트에 즉시 보내야합니다. 프로세스를 중지하려면 클라이언트가 프로세스 실행을 중지하도록 서버에 알리는 또 다른 요청을 보내야합니다. 당신은 .... 정말 더러운 해킹을 수행하려는 경우

+0

네, 맞습니다. :) – Adam

1

예,

는 기본적으로 ServerProxy 객체는 기본 소켓/HTTP 연결에 대한 핸들을 유지합니다. 그 내부 구조체에 도달하고 단순히 소켓을 닫으면() 클라이언트 코드가 예외없이 파열됩니다. 당신이 그것들을 적절히 처리한다면 당신의 취소.

전송 매개 변수를 통해 ServerProxy에 대한 자체 전송 클래스를 등록하고 원하는 것을 수행하는 취소 방법을 제공하면 좀 더 정상적으로 처리 할 수 ​​있습니다.

채널을 직접 닫지 않으면 서버가 처리하지 못합니다.

+0

고마워요,하지만 다른 방법을 서버 코드에 추가 할 것입니다. – Adam

관련 문제