Python 如何提高web应用程序的速度?(避免重建结构。)

Python 如何提高web应用程序的速度?(避免重建结构。),python,apache,web-applications,pickle,Python,Apache,Web Applications,Pickle,在成功构建静态数据结构()之后,我希望避免每次用户请求对其进行操作时都必须从头构建它。我的第一个想法是将结构(使用python的pickle)转储到一个文件中,并为每个查询加载该文件。不用说(正如我所了解的),由于文件相当大,这太耗时了 你知道我怎么能轻松地加快速度吗?将文件拆分为多个文件?还是服务器上运行的程序?(实施起来有多困难?) 谢谢你的帮助 我的建议是不要依赖对象结构。取而代之的是一个字节数组(或mmap'd文件等),您可以对其执行随机访问操作,并使用该结构中的指针实现交叉引用 诚然,

在成功构建静态数据结构()之后,我希望避免每次用户请求对其进行操作时都必须从头构建它。我的第一个想法是将结构(使用python的pickle)转储到一个文件中,并为每个查询加载该文件。不用说(正如我所了解的),由于文件相当大,这太耗时了

你知道我怎么能轻松地加快速度吗?将文件拆分为多个文件?还是服务器上运行的程序?(实施起来有多困难?)


谢谢你的帮助

我的建议是不要依赖对象结构。取而代之的是一个字节数组(或mmap'd文件等),您可以对其执行随机访问操作,并使用该结构中的指针实现交叉引用

诚然,它将向代码引入指针的概念,但这意味着不需要在每次处理程序进程启动时都取消对其的勾选,而且它还将使用更少的内存(因为不会有python对象的开销)

由于您的数据库将在处理程序进程的生命周期内得到修复(我想),因此您不必担心并发修改或锁定等问题


即使你按照你的建议做了,你也不必在每个用户请求时都重新构建它,只要在你的工作进程内存中保留一个实例就行了,这意味着构建它不会花费太长时间,因为你只需要在新的工作进程启动时构建它。

我的建议是不要依赖对象结构。取而代之的是一个字节数组(或mmap'd文件等),您可以对其执行随机访问操作,并使用该结构中的指针实现交叉引用

诚然,它将向代码引入指针的概念,但这意味着不需要在每次处理程序进程启动时都取消对其的勾选,而且它还将使用更少的内存(因为不会有python对象的开销)

由于您的数据库将在处理程序进程的生命周期内得到修复(我想),因此您不必担心并发修改或锁定等问题


即使你按照你的建议做了,你也不必在每个用户请求时都重建它,只要在你的工作进程中保留一个实例在内存中,这意味着它不会花费太长的时间来构建,因为你只需要在新的工作进程启动时构建它。

你可以将它转储到内存缓存中(例如)

该方法具有缓存密钥失效的优点。当基础数据发生更改时,可以使缓存的数据无效

编辑
以下是memcached的python实现:。谢谢。

您可以将其转储到内存缓存中(例如)

该方法具有缓存密钥失效的优点。当基础数据发生更改时,可以使缓存的数据无效

编辑
以下是memcached的python实现:。谢谢。

如果你能用项目中提供的补丁重建你的Python运行时,你会看到酸洗时的加速率为40%到150%,取消酸洗时的加速率为36%到56%;也许这会有帮助

如果你能用项目中提供的补丁重新构建Python运行时,你应该能看到40%到150%的酸洗速度,36%到56%的取消酸洗速度;也许这会有帮助

提高web应用程序速度的第一种方法,特别是当您有大量需要初始化的静态模块、类和对象时:使用一种支持从单个解释器服务多个请求的文件服务方式,例如mod_wsgi、mod_python、SCGI、FastCGI、Google App Engine、python web服务器。。。基本上,除了为每个请求启动一个新Python进程的标准CGI脚本之外,其他任何东西都可以。通过这种方法,您可以使数据结构成为一个全局对象,每个新进程只需要从序列化格式中读取数据,这样就不那么频繁了。

这是加快web应用程序速度的第一种方法,尤其是当您有大量静态模块时,需要初始化的类和对象:使用一种服务文件的方式,支持从单个解释器服务多个请求,例如mod_wsgi、mod_python、SCGI、FastCGI、googleappengine、pythonweb服务器。。。基本上,除了为每个请求启动一个新Python进程的标准CGI脚本之外,其他任何东西都可以。通过这种方法,您可以使数据结构成为一个全局对象,对于每个新的进程,只需要从序列化格式中读取数据,这样就不那么频繁了。

您使用的是什么框架?Django?没有web框架。只有Apache服务器。您使用的是什么框架?Django?没有web框架。只有Apache服务器。只是为了检查我是否正确理解这一点:如果我有一个树结构,并希望使用mmap访问它,我创建一个文件如下:让每一行代表一个节点。然后根在第一行,连同它的值(或指向它的指针)和它的子行的行号列表。(和孩子们的定义类似)这就是想法吗?好的,我实现了它。。。快!伟大的感谢关于指针的提示。为了检查我是否正确理解了这一点:如果我有一个树结构,并且想使用mmap访问它,我创建了一个文件,如下所示:让每一行代表一个节点。然后根在第一行,连同它的值(或指向它的指针)和它的子行的行号列表。(和孩子们的定义类似)这就是想法吗?好的,我实现了它。。。快!伟大的感谢关于指针的提示。memcached客户端有一个Python实现:简而言之,一个守护进程将运行在您的服务器上,为您的进程提供对象。请注意,python memcached依赖于酸洗,因此如果单独使用memcached还不够,您可能需要尝试alex的建议