折腾:
【已解决】后台用Flask封装百度的语音合成功能对外提供REST API接口
期间,需要去想办法实现这个效果:
可以保存临时语音合成的mp3数据到某个临时文件中
且可以设置有效期,比如10分钟,过了有效期后自动就消失-》防止占用系统内存或物理磁盘之类的
目前能想到的是,或许可以用redis,保存文件时设置expire时间?
Flask如何保存临时文件,且有个有效期的那种
然后对于外部rest api的话,可以返回url供访问
【调研】考虑用Python的临时文件实现保存临时文件且过期自动删除
所以感觉又是:
从原理上来说:
保存临时mp3数据到 真正的硬盘上某个此处专门用来存储临时数据的文件夹中
然后把文件路径保存到redis中,且设置一个过期时间
到了过期时间,然后系统再回调函数,去删除对应的文件
这样才能保证:
在有效期内,不论何时,临时文件都是存在的
且系统中不会存在大量的临时数据 -》因为有效期是自己设置的,可以很短,这期间不会有大量的用户的请求去产生临时文件
flask delay function
Python repeat function in flask until desired result with 40 second delay – Stack Overflow
Sleep How Can I Make a Time Delay in Python | freeCodeCamp Guide
Basic Message Queue with Redis | Flask (A Python Microframework)
Celery Background Tasks — Flask 1.0.2 documentation
好像可以用这个:
Flask delay task
python – Making an asynchronous task in Flask – Stack Overflow
Using Celery With Flask – miguelgrinberg.com
closeio/tasktiger: Python task queue. Because celery is gross.
看起来也一般
在 Flask 中使用 Celery — using celery with flask 1.00 documentation
Step 4: Celery based background tasks — Flask-AppFactory 0.2.2.dev20150818 documentation
很一般。
基于 Celery 的后台任务 — Flask 0.10.1 文档
但是看到:
result.wait()
不知道如何指定延期时间
所以:
可以用celery,然后用apply_async调用task,传递countdown为10*60,即可指定:
10分钟后再运行任务
然后就是:
不过发现一个新文件
dump.rdb
看起来像是redis的文件
dump.rdb
NoSQL之【Redis】学习(三):Redis持久化 Snapshot和AOF说明 – jyzhou – 博客园
“RDB就是Snapshot快照存储,是默认的持久化方式。即按照一定的策略周期性的将数据保存到磁盘。对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。”
“Snapshotting
By default Redis saves snapshots of the dataset on disk, in a binary file called dump.rdb. ”
看起来,暂时可以不去动redis的配置文件,就让他默认这么保存即可。
再去把celery的worker集成到Flask,确保可以正常调用,执行异步延时任务:
【已解决】把celery的task集成到Flask的app中
然后再去想办法集成到Flask中,且celery和redis的服务,也要集成到之前管理任务的supervidor中:
【已解决】把Celery+Redis集成到在线Flask中且用supervisor去管理后台服务
【总结】
如此,即可完成想要的效果了:
flask中,保存临时文件,且设置有效期,过了有效期自动删除掉
方案是:
在Flask中,用celery+redis去实现异步任务,调用apply_async时加上countdown延期时间,即可实现删除对应文件。
而文件本身很小,也不是很多,就放在flask项目下tmp/audio中即可。
具体代码和方式,详见:
【已解决】把celery的task集成到Flask的app中
【已解决】把Celery+Redis集成到在线Flask中且用supervisor去管理后台服务
转载请注明:在路上 » 【已解决】Flask中如何保存临时文件且可以指定有效期