2011-02-25 84 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)