python - Twisted:WAITING延迟到 'finish'

标签 python twisted deferred reactor

我怎样才能将 deferred ‘扔’到 react 器中,以便它在路上的某个地方得到处理?

情况

我有 2 个程序在本地主机上运行。

  1. 扭曲的 jsonrpc 服务 (localhost:30301)
  2. 扭曲的网络服务 (localhost:4000)

当有人连接到webservice时,需要向jsonrpc服务发送查询,等待它返回结果,然后在用户的web浏览器中显示结果(返回jsonrpc调用的值).

我似乎无法弄清楚如何返回延迟的 jsonrpc 调用的值。当我使用浏览器访问 Web 服务时,我收到 HTML 500 错误代码(未返回任何字节)和值:< Deferred at 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()

最佳答案

您在这里遇到的问题是网络的 IResource 是一个非常古老的界面,甚至早于 Deferred

解决您的问题的快速方法是使用 Klein ,它围绕 twisted.web 提供了一个非常方便的高级包装器,用于编写 Web 应用程序,除其他外,在整个 API 中为 Deferred 添加了大量处理。

解决它的稍微迂回的方法是 read the chapter of the Twisted documentation专门针对 twisted.web 中的异步响应。

关于python - Twisted:WAITING延迟到 'finish',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19256965/

相关文章:

javascript - Dojo xhr 链接

python - 新虚拟环境中的keras导入断言错误

http - 在 POST 上传完成之前重定向

javascript - 如何在 JQuery 语句成功时制作简单的延迟

python - 使用 Python Twisted 的代理服务器

python - 如何在扭曲中为某些文件打开新的日志文件

jsp - JSP 中立即计算 (${}) 和延迟计算 (#{}) 之间有区别吗?

VS2010中的Python

python - 尽管 dont_filter=False,Scrapy 仍访问相同的 URL

python - 为什么 protobuf 不适合大型数据结构?