【发布时间】:2020-04-08 08:00:58
【问题描述】:
上下文
我有一个网络测功机,它接收一个视频文件,目的是应用计算机视觉算法来返回分析。算法运行大约需要 10 秒。我目前的方法是用网络测功机处理它。整个过程非常快。用户不必等待超过一分钟。
什么不起作用
当然,捆绑网络测功机是个坏主意。有些用户已经超时......所以我尝试实现 redis 将工作传递给工作人员。
@application.route('/video', methods=['POST'])
@cross_origin()
def video():
video_file = request.files['videoData']
job = q.enqueue_call(
func=run_analysis, args=(video_file), result_ttl=5000
)
return json.dumps(job.id)
但这给了我一个错误
TypeError: cannot serialize '_io.BufferedRandom' object 我明白为什么。
在我的开发环境中,我可以将视频保存到文件系统并仅传递文件路径,但这在生产中不起作用,因为 web dyno 的文件系统是短暂的,工作人员不会看到文件。
所以我正在寻找获取视频文件的最快方法。速度在这里至关重要,因为用户正在等待处理他们的视频。
我的尝试
我尝试过 S3(直接从客户端上传并在工作程序中下载),但它使整个过程变慢了。首先,上传到 S3 比上传到我的 Heroku 端点需要更长的时间。其次,我必须将它下载到工作人员,这也需要一段时间。我真的不需要保留文件,所以这是一个非常低效的工作。
【问题讨论】:
标签: heroku flask amazon-s3 file-upload redis