我想通過Python中的XMLRPC調用一個很長的(耗時的)函數。從Python中的遠程函數產生或日誌SimpleXMLRPCServer
我server.py:
import time
import SocketServer
import SimpleXMLRPCServer
PORT = 19989
class MyXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
pass
def hello():
for x in xrange(10):
yield "hello {}".format(x)
time.sleep(1)
if __name__ == "__main__":
server = MyXMLRPCServer(("", PORT),
requestHandler=SimpleXMLRPCServer.SimpleXMLRPCRequestHandler,
logRequests=True,
allow_none=True)
server.register_function(hello)
server.serve_forever()
和我client.py:
import xmlrpclib
HOST, PORT = "localhost", 19989
if __name__ == "__main__":
my_server = xmlrpclib.ServerProxy('http://{}:{}'.format(HOST, PORT))
print my_server.hello()
有沒有辦法之前看hello()
功能的客戶端上的進展(如日誌記錄)它完成了嗎?
重寫'do_POST'方法給出錯誤''str'對象在服務器上沒有屬性'next''和'xmlrpclib.ProtocolError:'on客戶。另外,我發佈了一個單獨的問題,因爲如果我正確理解類似的問題,作者希望在運行該函數之前產生一個字符串。我想在函數運行時產生一個不確定數量的字符串。 –
user1156980
'yeild'將你的功能變成一個發電機。所以你需要一個函數來迭代'hello'返回的函數。您還需要類似地重構您的客戶端和服務器代碼。注意'while(1):server.handle_request()'而不是'server.serve_forever()'的使用。 – aneroid