0

要するに、リモートの 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 が私に呼び出されるまでブロックします。これで問題が解決することを願っています

4

2 に答える 2

0

あなたの主張はナンセンスです。xmlrpclib操作は同期的でブロッキングです。非同期操作などを実行するには、スレッドを使用して何かを実装する必要があります。

于 2011-02-25T19:07:28.797 に答える
0

私はパイネーターに同意します...

ただし、ブロック部分についてサポートが必要な場合は、ブロックする設計は非常に簡単です。

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)
于 2011-02-25T19:12:38.253 に答える