【问题标题】:Is there any way to make django remote api run faster in GAE?有什么方法可以让 django remote api 在 GAE 中运行得更快?
【发布时间】:2025-11-26 19:15:02
【问题描述】:

跟进这个问题here

我终于写了一个代码生成工具来将我所有的数据库数据包装成这样的东西:

Pdtfaamt(fano=212373,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='S',itemno='A3',itemamt=75,type=0).save()
Pdtfaamt(fano=212374,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='S',itemno='E1',itemamt=75,type=0).save()
Pdtfaamt(fano=212375,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='S',itemno='E6',itemamt=75,type=0).save()
Pdtfaamt(fano=212376,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='C',itemno='A3',itemamt=3,type=1).save()

是的,没错!我提取了整个数据库并将数据转换为人口指令代码,以便能够将我的数据库迁移到 GAE。

所以我部署了 django-nonrel 项目,使用 django-nonrel 远程 api 来触发数据填充过程。

它工作正常,除了有一个问题:它非常慢。谁能告诉我如何提高速度?我已经进行了一些计算,最多可能需要 30 天才能在 GAE 上启动并运行我的所有数据。

ps。我使用 django-nonrel 和 djangoappengine 作为后端。

【问题讨论】:

  • 这是导入生产数据存储还是开发?您是否编写了导入脚本来使用 remote_api?
  • 用于生产服务器。同时,我从远程api触发脚本。

标签: django google-app-engine django-nonrel djangoappengine


【解决方案1】:

编写导入脚本以利用 python 的 multiprocessing Pool

def import_thing(data):
    thing = ThingEntity(**data)
    thing.put()

def main():
    data = [{fano:'212374', comsname:'SMM', },
              {fano:'212374', comsname:'212375', },
              ...etc ]
    pool = multiprocessing.Pool(4) # split data into 4 parts to run in parallel
    pool.map(import_thing, data)

由于 AppEngine 生产服务器喜欢拥有大量连接,因此您应该调整池大小以找到最佳数量。这不适用于导入到开发服务器,因为它是单线程的。

同样重要:确保您将它们分批放置,例如 10-20 个,而不是一次放置一个,否则往返会影响您的表现。所以一个改进的脚本应该像这样的块工作:

data = [
    [item1,item2,item3],
    [item4, item5, item6],
    [item7, item8, item9],
]
pool.map(import_batch, data)

【讨论】:

  • 我正在根据您的建议重写代码生成器。但是,我得到了这样的东西:文件“/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/multiprocessing/pool.py”,第 422 行,在 get raise self._value TypeError: __init__ () 关键字必须是字符串 我们允许在 GAE 上使用多处理吗?还是因为其他原因?
  • 对了,我还是用远程控制台触发代码。
  • 您的错误听起来像是您有一个带有 unicode 字符串键的 dict .... 确保您将 **kwargs 传递为 {"prop":"value"} 而不是 {u'prop': 'value'}
【解决方案2】:

您可能想查看Mapper API

【讨论】:

    最近更新 更多