当前位置:  开发笔记 > 编程语言 > 正文

如何在Web应用程序中使Python对象持久化?

如何解决《如何在Web应用程序中使Python对象持久化?》经验,为你挑选了1个好方法。

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

出于性能原因,在(半规范化的)数据库数据的每个请求上重新初始化状态很快就变得不可行.例如,以某种方式缓存状态的Python对象是非常可取的,这样可以在必要时简单地使用和/或更新它.但是,由于这是一个Web应用程序,因此有几个进程处理请求,因此使用全局变量是不可能的.

我已经尝试序列化相关对象(通过pickle)并将序列化数据保存到DB,现在我正在尝试通过memcached缓存序列化数据.但是,这仍然会经常对序列化和反序列化对象产生巨大的开销.

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

我需要一些建议!这是我开发Web应用程序的第一步,所以我希望这是一个很常见的问题,有这些问题的众所周知的解决方案.在这一点上,假设Python后端在单个服务器上运行的解决方案就足够了,但对于可扩展到多个服务器的解决方案来说也是额外的点:)

笔记:

我有这个应用程序工作,目前在线和活跃的用户.我开始时没有做任何过早的优化,然后根据需要进行优化.我已经完成了测量和测试,以确保上述问题是实际的瓶颈.我确信我可以从当前设置中挤出更多性能,但我想问一下是否有更好的方法.

设置本身仍在进行中; 假设系统的架构可以是您的解决方案的任何套件.

S.Lott.. 8

过早优化要谨慎.

另外:"Python后端运行一个算法,其状态......"是Web框架中的会话.而已.让Django框架在缓存中维护会话状态.期.

"当用户使用应用程序时,算法的每用户状态会经历许多小的变化." 大多数Web框架都提供缓存的会话对象.通常它的性能非常高.请参阅Django的会话文档.

咨询.[修正]

看来你有一些有用的东西.利用学习你的框架,学习工具,并学习你可以转动的旋钮,而不会流汗.具体来说,使用会话状态.

其次,摆弄缓存,会话管理和易于调整的事情,看看你是否有足够的速度.通过试用它们来了解MySQL套接字或命名管道是否更快.这些是无编程优化.

第三,衡量绩效以找到实际的瓶颈.准备好提供(并保护)测量结果,使其足够精细,足以提供有意义的替代品比较.

例如,显示持久会话和缓存会话之间的性能差异.



1> S.Lott..:

过早优化要谨慎.

另外:"Python后端运行一个算法,其状态......"是Web框架中的会话.而已.让Django框架在缓存中维护会话状态.期.

"当用户使用应用程序时,算法的每用户状态会经历许多小的变化." 大多数Web框架都提供缓存的会话对象.通常它的性能非常高.请参阅Django的会话文档.

咨询.[修正]

看来你有一些有用的东西.利用学习你的框架,学习工具,并学习你可以转动的旋钮,而不会流汗.具体来说,使用会话状态.

其次,摆弄缓存,会话管理和易于调整的事情,看看你是否有足够的速度.通过试用它们来了解MySQL套接字或命名管道是否更快.这些是无编程优化.

第三,衡量绩效以找到实际的瓶颈.准备好提供(并保护)测量结果,使其足够精细,足以提供有意义的替代品比较.

例如,显示持久会话和缓存会话之间的性能差异.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有