我试图创建一个Twisted应用程序,一方面是XMLRPC服务器,另一方面是特殊非对称二进制协议的客户端(让我们称之为“二进制”) 现在它的工作原理如下:
现在可行,但我想放弃投票程序。
但是当我在xmlrpc请求处理程序中时,“二进制”协议交换不执行,所以我从来没有从“二进制”服务器获得结果。
你能提出什么建议?单独的线程?还有别的吗?
from twisted.internet import reactor
reactor.connectTCP(globalconf.cfgBinServerAddr, globalconf.cfgBinServerPort, BinFactory(binProtocol))
reactor.listenTCP(globalconf.xmlrpcPort, server.Site(xmlrpcProtocol))
reactor.run()
答案 0 :(得分:0)
这是一个示例xmlrpc服务器,它返回一个延迟的子进程输出:
#!/usr/bin/env python
from timeit import default_timer as timer
from twisted.internet import reactor, utils
from twisted.web import xmlrpc, server
class Example(xmlrpc.XMLRPC):
def xmlrpc_echo(self, x):
"""Sanity check."""
return x
def xmlrpc_getoutput(self):
shell_command = "echo before sleep; sleep 10; echo after sleep"
start = timer()
d = utils.getProcessOutput("/bin/sh", ["-c", shell_command])
print("Deferred created in %.2f seconds" % (timer() - start,)) # instant
return d
reactor.listenTCP(9657, server.Site(Example()))
reactor.run()
以及相应的xmlrpc客户端:
#!/usr/bin/env python
from timeit import default_timer as timer
import xmlrpclib
s = xmlrpclib.Server('http://localhost:9657/')
def report_delay(func, *args):
start = timer()
print("Result %r took us %.2f seconds" % (func(*args), timer() - start))
report_delay(s.echo, "Mor-ee-air-teeeee") # should be instant
report_delay(s.getoutput) # should be ~10 seconds