标签:python twisted deferred reactor
我怎样才能“推迟”进入反应堆,以便在未来的某个地方处理?
情况
我在localhost上运行了2个程序.
>扭曲的jsonrpc服务(localhost:30301)
>扭曲的web服务(localhost:4000)
当有人连接到Web服务时,它需要向jsonrpc服务发送查询,等待它返回结果,然后在用户的Web浏览器中显示结果(返回jsonrpc调用的值).
我似乎无法弄清楚如何返回延迟jsonrpc调用的值.当我使用浏览器访问webservice时,我得到一个HTML 500错误代码(没有返回任何字节)和Value:<推迟到0x3577b48>.
它返回延迟对象,而不是回调的实际值.
一直在环顾四个小时,并在询问前尝试了很多不同的变化.
from txjsonrpc.web.jsonrpc import Proxy
from twisted.web import resource
from twisted.web.server import Site
from twisted.internet import reactor
class Rpc():
def __init__(self, child):
self._proxy = Proxy('http://127.0.0.1:30301/%s' % child)
def execute(self, function):
return self._proxy.callRemote(function)
class Server(resource.Resource):
isLeaf = True
def render_GET(self, request):
rpc = Rpc('test').execute('test')
def test(result):
return '<h1>%s</h1>' % result
rpc.addCallback(test)
return rpc
site = Site(Server())
reactor.listenTCP(4000, site)
print 'Running'
reactor.run()
解决方法:
你在这里遇到的问题是web的IResource是一个非常古老的界面,甚至比Deferred更早.
问题的快速解决方案是使用Klein,它为twisted.web提供了一个非常方便的高级包装,用于编写Web应用程序,除此之外,还为整个API中的Deferred添加了大量处理.
稍微更迂回的解决方法是read the chapter of the Twisted documentation,具体是关于twisted.web中的异步响应.
标签:python,twisted,deferred,reactor 来源: https://codeday.me/bug/20190624/1281988.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。