Python中异步调用转为同步调用
简单来说,我要去调用一个远程的XMLRPC服务器,它会异步处理我的请求。
import xmlrpclib
client = xmlrpclib.ServerProxy('http://localhost:8080')
client.add(3,5)
def add_result(result):
print result
我知道在未来的某个时刻,add_result这个函数会被调用,并且会带上结果。问题是,我想把client.add这个调用变成一个阻塞调用,也就是说它会等到结果出来再返回给我。我这样做是为了配合一个图形用户界面(GUI),这个界面会调用我。我想知道应该去哪里找相关的资料来解决这个问题?我其实不太确定从哪里开始。
我觉得我没有把自己想说的表达清楚。我要调用的服务器已经实现了异步处理。当我调用add时,它会返回true。而且我知道服务器希望我实现add_result这个函数,服务器会在适当的时候调用我。我的目标是把这个复杂的流程理顺,让别人调用add时,我会一直等到add_result被调用,然后再把结果返回给调用我的人。希望这样能让事情更清楚。
2 个回答
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)
0
你说的完全不对。xmlrpclib 的操作是同步的,也就是说它会一个接一个地执行,直到完成才会继续进行。如果你想要实现异步操作,也就是同时做几件事情,你就需要用到线程来实现。