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 件のコメント:
コメントを投稿