在我的烧瓶项目中,我使用ftputil库。在其中一个应用程序部分中,我使用Flask documentation中描述的内容流:
@app.route('/section')
def section():
def generate():
ftp.upload(source, target, "b", callback)
yield 'completed'
return Response(generate())
示例中的函数
generate
将文件上载到FTP服务器,如ftputil documentation中所述。方法中使用的回调函数[
callback(chunk)
]对每个上载的文件块执行。是否可以将
upload
从回调输出到流?任何肮脏的黑客也非常受欢迎。谢谢你的帮助!
最佳答案
我假设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())
关于python - 如何将块长度从上传方法传递到流内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10550424/