【发布时间】:2013-03-11 13:43:17
【问题描述】:
我正在 Python 中实现一个简单的上传处理程序,它将上传的文件以块的形式读取到内存、GZip 并对其进行签名,然后将它们重新上传到另一台服务器以进行长期存储。我已经设计了一种使用我的网络服务器分块读取上传的方法,基本上我有一个这样的工作流程:
class MyUploadHandler:
def on_file_started(self, file_name):
pass
def on_file_chunk(self, chunk):
pass
def on_file_finished(self, file_size):
pass
这部分效果很好。
现在我需要在对它们进行修改后将文件分块上传到最终目的地。我正在寻找一个有点像这样的工作流程:
import requests
class MyUploadHandler:
def on_file_started(self, file_name):
self.request = requests.put("http://secondaryuploadlocation.com/upload/%s" %
(file_name,), streaming_upload = True)
def on_file_chunk(self, chunk):
self.request.write_body(transform_chunk(chunk))
def on_file_finished(self, file_size):
self.request.finish()
有没有办法使用 Python requests 库来做到这一点?似乎可以阅读they allow for file-like upload objects,但我不确定这到底意味着什么以及如何将其应用于我的情况。如何提供这样的流式上传请求?
【问题讨论】:
-
你需要提供一个generator for chunked uploads,但是那个pulls数据;您的代码想要推送。我认为它需要一个单独的线程和一个队列。
-
关于从哪里开始的任何想法?我的 Python 线程不太好。
-
这部分取决于您为此使用的 Web 框架以及它如何处理并发。
-
我应该为每次上传生成一个流氓线程以便同时重新上传文件吗?我什至不知道从哪里开始实施这一点。您能否在 Web 应用程序的上下文之外提供一个简化示例,用于通过生成器方法将推送数据转换为可拉取数据?
标签: python http python-requests