동기

2014-07-01 4 views
2

나는 다음과 같이 정의 아우토반 PRC 클라이언트 기능이있다. 그것은 잘 작동하고, 전압은 RPC 서버에서 정확하게 읽힌다.동기

하지만 동기 호출을 만들고 싶습니다. 콜백 함수에서 값을 가져 오지 않으면 다음과 같이 보일 것입니다.

def call_server_synchronous_get_voltage(self): 
(How to combine above callback function, so that it will be synchronous) 
return voltage 

내가 시도 :

A) inlinecallback 데코레이터를. 그러나 여전히 지연된 객체를 반환합니다.

@inlineCallbacks 
def call_server_synchronous_get_voltage_inlinecallback(self): 
    #'val' is correct value from server 
    val = yield self.self.call("http://server.com/server#get_voltage") 

    #but how to return it???? 
    returnValue(val) #This is deferred object. Not voltage value 

누군가가 @inlineCallback을 이해하도록 도와 줄 수 있습니까? 이 목적을 위해이 데코레이터가 있습니까?

b) 나는 크로 셰 뜨개질 @ 웨이트리스 데코레이터를 시험해 보았습니다. 발신자가 콜백을 사라지게해야합니다.

@wait_for(timeout=10) 
def call_server_synchronous_get_voltage_crochet(self): 

    val = self.self.call("http://server.com/server#get_voltage") 
    val.addCallback(lambda result: result) 

    return val 

이 함수는 올바른 값을 반환합니다. 그러나 그것은 한 번만 작동합니다. Django 서버에서 call_server_synchronous_get_voltage_crochet()을 호출하여 웹 페이지를 표시하려고합니다.

Lost client connection: [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionDone'>: Connection was closed cleanly. ]

방법 아우토반 RPC에 전화를하고 동 기적으로 다시 결과를 얻을 : 재 장전 웹 페이지 2 시간, 서버에 아우토반 RPC 연결로 삭제하면 오류인가?

+1

귀하의'wait_for' 코드는 inlineCallbacks' 대신 ... –

+0

내가 내 원래의 질문에 보정을 할 필요가'사용합니다. b) 저는 크로 셰 뜨개질 @wait_for 데코레이터를 사용했습니다. 발신자가 콜백을 사라지게해야합니다. @wait_for (제한 시간 = 5) DEF call_server_synchronous_get_voltage_crochet (자기) 브로 = 항복 self.self.call ("http://server.com/server#get_voltage") val.addCallback (람다 결과 : 결과) 반품 금액 – user3792705

+1

질문 하단의 "수정"버튼을 클릭하십시오. –

답변

0

크로 셰 뜨개질을 사용하려면 아마 아무것도 굴리지 않아야합니다.

@wait_for(timeout=10) 
def call_server_synchronous_get_voltage_crochet(self): 
    val = self.self.call("http://server.com/server#get_voltage") 
    val.addCallback(lambda result: result) 
    return val 
+0

답장을 보내 주셔서 감사합니다. 내 원래 게시물에 오류가있었습니다. 수확량을 사용하지 않아야한다. 내 게시 된 결과는 yield를 사용하지 않은 결과입니다. 미안해. 그래서, 그것은 처음 일합니다. 하지만 2 번 호출되면 rpc 연결이 끊어지며 2 번 통화에 대한 호출이 발생하지 않고 이후에 호출됩니다. 확실하지 않은 경우 1) Crocket을 잘못 사용했습니다. 2) 내 프로그램에 다른 문제가 있습니다. 귀하의 게시물을 기반으로, 나는 올바르게 크로 셰 뜨개질을 사용하고 있습니다. 크로 셰 뜨개질하지 않고 다른 방법이 있습니까? – user3792705

+0

업데이트 : wait_for 데코레이터가 안정적으로 작동합니다. rpc 연결 끊김 문제는 내가 다루어야 할 다른 문제로 판명되었습니다. – user3792705

+0

더 많은 정보를 제공하지 않는 한 나는 그걸 도울 수 없습니다. –