异步调用Python中的同步调用

时间:2011-02-25 19:00:35

标签: python asynchronous synchronous

本质上,我将调用远程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_result,然后我会回到谁给我打电话。我希望这可以解决问题

2 个答案:

答案 0 :(得分:0)

你的主张是无稽之谈。 xmlrpclib操作是同步和阻塞的。要执行异步操作等,您需要使用线程实现一些东西。

答案 1 :(得分: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)