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