2011-02-25 58 views
0

實質上,我打算調用遠程XMLRPC服務器,它將異步處理請求。異步調用Python中的同步調用

import xmlrpclib 

client = xmlrpclib.ServerProxy('http://localhost:8080') 

client.add(3,5) 


def add_result(result): 
    print result 

我知道在將來的某個時候,add_result會被調用的結果。事情是。我希望能夠將調用client.add轉換爲阻塞調用,並返回結果。我正在做這個GUI來調用我。問題是我應該在哪裏閱讀有關這種解決方案?我不確定從哪裏開始。

我不認爲我已經完全解釋了自己。 我正在調用的服務器正在實現異步部分。當我打電話添加它將返回true。而且我知道服務器期望我實現add_result,這就是它會調用我的東西。我想要做的是清理這個瘋狂的計劃,以便有人可以打電話給我加我,我會阻止,直到add_result被調用,然後我會回到誰打電話給我。我希望這可以清理東西

+4

咦?這不是xmlrpclib的工作原理,調用'client.add(3,5)'會阻塞並返回類似其他函數的東西。你的意思是扭曲的xmlrpclib? – 2011-02-25 19:04:59

+1

你認爲存在什麼樣的magickery讓'add_result'像延遲迴調和'client.add'一樣被異步調用? – Santa 2011-02-25 19:12:33

+0

對不起,我已經很好地解釋了自己,希望編輯清除它 – MattyW 2011-02-25 19:57:29

回答

0

你的說法是無稽之談。 xmlrpclib操作是同步和阻塞的。爲了執行異步操作等,你需要使用線程來實現某些東西。

0

我pynator同意...

但你需要在固定件幫助的情況下......來阻止設計很簡單:

class GUI(): 
    def __init__(self): 
     self.blocking_thread = Thread(target=self.get_data) 
     self.client = xmlrpclib.ServerProxy(...) 

    def query_for_data(): 
     self.blocking_thread.start() 
     self.blocking_thread.join() 

    def get_data(self): 
     while(True): 
      #this assumes this returns some how and doesn't block.. 
      result = self.client.add(...) 
      if(result): break; 

      time.sleep(1)