我试图制作一个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()发布于 2013-12-07 18:56:58
下面是一个返回延迟子进程输出的示例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 secondshttps://stackoverflow.com/questions/20443535
复制相似问题