Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扭曲、延迟的请求和文件与错误页面_Python_Twisted_Deferred - Fatal编程技术网

Python 扭曲、延迟的请求和文件与错误页面

Python 扭曲、延迟的请求和文件与错误页面,python,twisted,deferred,Python,Twisted,Deferred,我目前正在用python/twisted构建一个http服务器 此服务器必须在另一个web服务器上获取内容,将其存储在本地并将响应发送回客户端。如果遇到404,它必须尝试提供本地文件,否则如果根本没有本地文件,它将失败 为了实现这一点,我使用了不同的请求。我的代码大致如下所示: class RemoteFile(Resource): isLeaf = True def render_GET(self, request): # Start downloading

我目前正在用python/twisted构建一个http服务器

此服务器必须在另一个web服务器上获取内容,将其存储在本地并将响应发送回客户端。如果遇到404,它必须尝试提供本地文件,否则如果根本没有本地文件,它将失败

为了实现这一点,我使用了不同的请求。我的代码大致如下所示:

class RemoteFile(Resource):
    isLeaf = True

    def render_GET(self, request):
        # Start downloading the corresponding file on the remote server
        # Will call `self.serve_local_file` when done
        return NOT_DONE_YET

    def serve_local_file(self, request):
        if self.file_exists_for_request(request):
            fileResource = File(filename)
            fileResource.render(request)
        else:
            page = NoResource("No such file")
            html = page.render(request)

            # The next two lines are my problem
            request.write(html)
            request.finish()
我必须添加最后两行(
write()
finish()
)才能让请求真正完成。对于
文件
资源,我不需要这些行,因为与NoResource不同,它自己处理写入/完成

这本身不是问题,但事实证明,这个
页面
变量不是硬编码的,它实际上是我的类上的
回退
属性,应该是
资源
。这意味着我将来可能想用默认的
文件替换它。在这种情况下,我将不得不修改我的代码


我是否做错了什么,或者这是
文件
错误页面
的接口不一致?

您的问题本身有一个提示:

return NOT_DONE_YET
这是
IResource
如何发出信号的一部分,表明它是否返回一个字符串,调用方必须在显式“完成”请求之前写入该字符串,或者
IResource
是否负责执行这些操作


检查您调用的任何对象的返回值
render
on,然后相应地执行操作。

请包含一个完整的、可运行的示例,这样我们就可以实际运行一些东西并查看行为是什么,而不是猜测。有趣的答案,我将对此进行研究!