gpt4 book ai didi

python - 如何在 Heroku(使用 python)上的 web 和 worker(不同的 dynos)之间通信数据?

转载 作者:行者123 更新时间:2023-12-03 06:44:25 25 4
gpt4 key购买 nike

我正在使用两个测功机(网络和工作人员)。 web 使用 flask 应用程序处理请求。 worker 运行基本的 python 代码,每 5 分钟输出一个 .csv 文件。这个文件非常小(<1MB)。flask 应用程序应该读取这个 .csv 文件,它是服务请求所必需的。问题是:最有效的方法是什么?据我了解,测功机是相互隔离的。其次,heroku 有一个临时文件系统(这对我的应用程序来说没问题),因为 .csv 文件不需要在重启之间持续存在。他们也不需要备份。工作人员写出的 .csv 文件在 ls 中不可见输出(在执行 heroku run bash 之后)。这很可能是因为 web 和 worker 是相互隔离的。在网上花了一些时间研究选项后,我认为有三个选项:
(1) 使用 AWS S3:这是事件文件的好选择吗?这些文件应该以高频率写入和读取 - S3 对我的应用程序来说不会很慢。其次,我想从 python 代码中编写(并读回)。我不确定如何使用 S3 执行此操作。 S3 似乎是您的应用程序需要的静态文件的存储。
(2) Postgres:worker 和 web 共享这个存储吗?可以为此编写一个 .csv 文件还是必须是 SQL ?
(3) Redis:这个我不明白。它是使用队列在测功机之间进行通信的东西。可以用来传递数据吗?
只有当请求来自前端时,我的 flask 应用程序才必须读取文件。不确定 Reddis 队列如何帮助解决这个问题。
谢谢。

最佳答案

redis 当然有很好的排队功能。但它的核心是一个远程字典服务,因此得名。
您的 worker 可以 PUT该 csv 文件到 redis 中,您的网络测功机可以检索它。

r.set('csv', serialized_data);
把它放在那里,并且
serialized_data = r.get('csv'); 
把它拿回来。 'csv' 是 redis 键。在 heroku redis 服务的范围内,您可以拥有任意数量的 key (更多 key 、更多数据、更高成本)。
redis 足够高效,您的 web dyno 可以 get()每次需要时获取数据。它总是会得到最新的数据(除非工作人员在启动时第一次没有把它放在那里)。除非您的负载非常高,否则无需在您的网络测功机中进行精心缓存。

关于python - 如何在 Heroku(使用 python)上的 web 和 worker(不同的 dynos)之间通信数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64436428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com