【问题标题】:How can I preload a Python library in Django?如何在 Django 中预加载 Python 库?
【发布时间】:2012-10-07 01:02:34
【问题描述】:

在我的一个 Django 应用程序中,views.py 中的代码如下所示:

import myLib

resultOne = myLib.myFunction('Some data')
resultTwo = myLib.myFunction('Some more data')
resultThree = myLib.myFunction('Even more data')

每当我访问该页面时,加载都需要一分钟。原因是myLib 占用大量内存,每次加载页面时都在加载。我知道resultTworesultThree 会在resultOne 执行后快速执行。

我想在 Django 中预加载 myLib 以便将其存储在内存中,因此 resultOneresultTworesultThree 都可以快速执行。我该怎么做?

编辑: 这可能属于缓存的范畴。 resultOneresultTworesultThree 的输入每次都会更改,并且运行频率很高。

【问题讨论】:

  • 您需要多久执行一次 resultOne、resultTwo 和 resultThree?
  • 非常频繁。假设每次加载页面时都需要执行它们。
  • 库导入不是问题。它在第一个页面加载期间执行一次。调用myFunction 的时间已经耗尽,因此您应该检查该代码。
  • 我不确定库导入是否是问题所在。但是,我认为问题不在于myFunction。请记住,resultTworesultThree 执行得很快。我知道这一点是因为我在它们之间放置了打印语句,虽然它们都需要 30 秒才能出现,但它们同时出现。
  • 你在提到快速执行结果时总是忽略resultOne - resultOne 是慢的吗?

标签: python django django-admin django-views libraries


【解决方案1】:

在 Django 中,您可以将其导入 __init__.py 并将其作为变量访问。

【讨论】:

    【解决方案2】:

    如果需要时间的是数据的加载/处理,您应该查看 Django 的caching framework,它使用memcached 将常用数据存储在单独的进程中。

    【讨论】:

    • 我一直在看它,但是我仍然找不到任何关于如何缓存库的信息。 resultOneresultTworesultThree 获取的数据总是变化的。
    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2014-06-18
    • 2023-04-01
    相关资源
    最近更新 更多