我想制作一个网页,每 10 秒生成一个 0 到 99 之间的统一随机数,并显示 100 个最新数字的列表(对于访问该网站的每个人来说都是相同的)。它应该实时更新。
我的设计如下:
- 一个长时间运行的 Python 进程(例如使用 supervisord),它在一个永恒的循环中运行,以 10 秒的间隔生成数字,并将数字写入文件或 SQL 数据库,并修剪不再需要的旧数字。
- 然后 Web 服务器进程简单地读取文件并显示给用户(在初始加载时,或者从 Ajax 调用中获取最新的数字)
我对这个解决方案感觉不太好。它在文件系统 I/O 上相当繁重,这并不是真正的瓶颈或任何东西,但我只是想知道是否有更聪明的方法仍然很简单。如果我可以将列表存储为进程之间共享的内存数据结构,我可以每 10 秒有一个进程推送和弹出值,然后 Web 服务器进程可以读取该数据结构。我读了一些关于 Unix 域套接字的内容,但不清楚这是否非常适合我的问题
有没有更有效但仍然简单的方法?
编辑:Martijn Peters 在他的回答中建议的方法(在有人访问之前不要生成任何东西)是明智的,我也在考虑它,因为该网站的访问量不是很大。我看到的问题是竞争条件,因为您有多个进程试图写入同一个文件/数据库。如果文件/数据库中的值是陈旧的,我们需要生成新的值,但是一个进程可能会在另一个进程有机会更新它们之前读取旧值。此问题中描述的文件锁定是一种可能性,但答案中的许多人警告说,有多个进程写入同一个文件。