3

在我的 Flask 项目中,我使用ftputil库。在其中一个应用程序部分中,我使用Flask 文档中描述的内容流:

@app.route('/section')
def section():
    def generate():
        ftp.upload(source, target, "b", callback)
        yield 'completed'
    return Response(generate())

示例中的函数generate将文件上传到 FTP 服务器,如ftputil 文档中所述。

方法中使用的回调函数 [ callback(chunk)]upload为每个上传的文件块执行。

是否有可能len(chunk)从回调输出到流?任何肮脏的黑客也非常受欢迎。

谢谢你的帮助!

4

1 回答 1

1

我假设 ftp.upload() 同步运行,这是有道理的。我没有测试下面的代码,所以它可能充满了错误,但这个想法应该可行。

import threading, Queue

@app.route('/section')
def section():
    q = Queue.Queue()
    def callback(chunk):
        q.put(len(chunk))
    t = threading.Thread(target=lambda: ftp.upload(source, target, "b", callback) or q.put(None))
    t.setDaemon(True)
    t.start()
    def generate():
        while 1:
            l = q.get()
            if l is None:
                return
            yield unicode(l) + '\n'
    return Response(generate())
于 2012-05-15T14:28:35.960 回答