python - 如何使 Python 对象持久存在于 Web 应用程序中?

标签 python web-applications concurrency persistence

我正在编写一个相当复杂的 Web 应用程序。 Python 后端运行一种算法,其状态取决于存储在几个不经常更改的相互关联的数据库表中的数据,以及经常更改的用户特定数据。当用户使用应用程序时,算法的每个用户状态会发生许多小的变化。在每个用户的工作中经常使用该算法来做出某些重要决策。

出于性能原因,对来自(半规范化)数据库数据的每个请求重新初始化状态很快变得不可行。例如,最好以某种方式缓存状态的 Python 对象,以便在需要时可以简单地使用和/或更新它。然而,由于这是一个 Web 应用程序,有多个进程处理请求,因此使用全局变量是不可能的。

我已经尝试序列化相关对象(通过 pickle)并将序列化数据保存到数据库,现在正在尝试通过 memcached 缓存序列化数据。但是,这仍然具有经常序列化和反序列化对象的显着开销。

我查看了共享内存解决方案,但我发现的唯一相关内容是 POSH .然而 POSH 似乎并没有被广泛使用,我觉得将这样一个实验性组件集成到我的应用程序中并不容易。

我需要一些建议!这是我第一次尝试开发 Web 应用程序,所以我希望这是一个足够普遍的问题,以至于有针对此类问题的众所周知的解决方案。在这一点上,假设 Python 后端在单个服务器上运行的解决方案就足够了,但对于可扩展到多个服务器的解决方案,还有额外的要点:)

注意事项:

  • 我有这个应用程序在运行,目前正在运行并且有活跃用户。我一开始没有做任何过早的优化,然后根据需要进行优化。我已经进行了测量和测试,以确保上述问题是真正的瓶颈。我非常确定我可以从当前设置中获得更多性能,但我想问问是否有更好的方法。
  • 设置本身仍在进行中;假设系统的架构可以是适合您的解决方案的任何架构。

最佳答案

注意过早优化。

补充:“Python后端运行一个算法,其状态...”是网络框架中的 session 。而已。让 Django 框架在缓存中维护 session 状态。时期。

“当用户使用应用程序时,算法的每个用户状态会发生许多小的变化。”大多数 Web 框架都提供缓存 session 对象。通常它的性能非常高。参见 Django 的 session documentation为了这。

建议。 [修订]

看来您有一些有用的东西。利用杠杆来学习您的框架,学习工具,并了解您可以毫不费力地转动哪些旋钮。具体来说,使用 session 状态。

其次,摆弄缓存、 session 管理和易于调整的东西,看看你是否有足够的速度。通过尝试找出 MySQL 套接字或命名管道是否更快。这些是无编程优化。

第三,衡量性能以找出您的实际瓶颈。准备好提供(并捍卫)足够细粒度的测量结果,使其足够有用且足够稳定,以提供有意义的备选方案比较。

例如,显示持久 session 和缓存 session 之间的性能差异。

关于python - 如何使 Python 对象持久存在于 Web 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/330367/

相关文章:

java - Stripes 链接事件触发的验证不正确

java - 限制对方法的并发访问

python - 如何沿着对象的中心画一条线

python - 通过连接另一个列表的元素创建一个字符串列表

logging - 我们可以将所有控制台日志定向到文件吗?

c# - 如何最好地从应用程序的另一部分 "turn off"网页?

go - 如何将 map 作为值传递?

java - 有没有办法对 AtomicReference 设置锁定

python - Selenium 和 python3 激活文本框而不输入值

python - 导入错误 : No module named sip (python2. 7 PyQt4)