2008年2月19日火曜日

SimpleXMLRPCServerについての疑問

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
つぎのようなserverをたてておきます。

server.py

#!/usr/bin/python

import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
import time

def sleep(n):
time.sleep(n)
return n

server = SimpleXMLRPCServer(('localhost', 9000))
server.register_function(sleep)
server.serve_forever()


んで、このclientでたたきます。
call.py

#!/usr/bin/python

import xmlrpclib
import sys

server = xmlrpclib.ServerProxy('http://localhost:9000')
print server.sleep(int(sys.argv[1]))


たたくときに

#!/bin/sh
python call.py 10 &
python call.py 2 &

とかします。
するとかならず

10
2

なにがいいたいかというと最初の呼び出しが返るまで次の呼び出しはブロックされているということです。

ブロックしないとなるとそれぞれの呼び出しにprocessもしくはスレッドを与えるしかないでしょう。しかし、rpcの中でforkしたら何がおこるんでしょうね。いい予感がしません。親はreturnしてclientに値を返しますが、もうひとつは処理が終わったらexitするのかな?

非同期な方法も考えましょう。
pygtkのmlへのポスト
twistedを使うことが一般的解決策らしいですが・・・ちょっと勉強が必要。

0 件のコメント: