如何解决如何在Web和Heroku上的工作程序不同的dynos之间通信数据使用python?
我正在使用两个测功机(网络和工作程序)。 Web使用Flask应用处理请求。 worker运行基本的python代码,每5分钟输出一个.csv文件。该文件非常小(ls输出中(执行heroku run bash
之后不可见)。这很可能是因为网络和工作人员相互隔离。在花了一些时间在线研究这些选项之后,我认为有三种选择:
(1)使用AWS S3:这对于 active 文件是一个不错的选择吗?应该以 high 的频率读写文件-对于我的应用程序S3不会很慢。其次,我想从python代码中编写(和读回)。我不确定如何使用S3执行此操作。看来S3可以存储您的应用程序所需的静态文件。
(2)Postgres:工作者和Web共享此存储吗?可以向其中写入.csv文件,还是必须使用sql?
(3)Redis:我不明白这一点。它使用队列在测功机之间进行通信。可以用来传达数据吗?
仅在前端发出请求时,我的flask应用程序才必须读取文件。不确定Reddis队列如何帮助您。
谢谢。
解决方法
redis当然具有良好的排队功能。但从本质上讲,它是一个远程词典服务,因此得名。
您的工作人员可以PUT
将该csv文件转换为redis,而您的Web dyno可以检索它。
r.set('csv',serialized_data);
将其放置在那里,
serialized_data = r.get('csv');
找回它。 'csv'是redis键 。在heroku redis服务的限制内,您可以拥有任意数量的密钥(更多的密钥,更多的数据,更高的成本)。
redis的效率足够高,您的Web dyno可以在每次需要时get()
进行数据处理。它将始终获取最新的数据(除非工作人员在启动时尚未第一次将其放到那里)。除非您的负载很高,否则无需在Web dyno中进行复杂的缓存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。