小编Cer*_*rin的帖子

使用Django ORM处理大量大型记录

我有一个包含大约30k记录的表,我正在尝试迭代并使用Django的ORM进行处理.每个记录存储几个二进制blob,每个blob可以是几MB,我需要处理和写入文件.

但是,由于内存限制,我在使用Django时遇到了麻烦.我的系统上有8GB的内存,但在处理了大约5k的记录之后,Python进程消耗了所有8GB并被Linux内核杀死.我已经尝试了各种技巧来清除Django的查询缓存,例如:

  1. 定期打电话 MyModel.objects.update()
  2. 设置 settings.DEBUG=False
  3. 定期调用Python的垃圾收集器 gc.collect()

但是,这些似乎没有任何明显的效果,我的过程继续遇到某种内存泄漏,直到它崩溃.

还有什么我可以做的吗?

由于我只需要一次处理一个记录,并且我从不需要在进程中再次访问同一记录,所以我不需要保存任何模型实例,或者一次加载多个实例.你如何确保只加载一条记录,并且Django 没有缓存任何内容并在使用后立即取消分配所有内存?

python django django-orm

4
推荐指数
1
解决办法
940
查看次数

防止异常终止Python迭代器

如何防止异常过早终止Python生成器/迭代器?

例如,请考虑以下事项:

#!/usr/bin/env python

def MyIter():
    yield 1
    yield 2
    yield 3
    raise Exception, 'blarg!'
    yield 4 # this never happens

my_iter = MyIter()
while 1:
    try:
        value = my_iter.next()
        print 'value:',value
    except StopIteration:
        break
    except Exception, e:
        print 'An error occurred: %s' % (e,)
Run Code Online (Sandbox Code Playgroud)

我期待输出:

value: 1
value: 2
value: 3
An error occurred: blarg!
value: 4
Run Code Online (Sandbox Code Playgroud)

但是,在异常之后,迭代器终止,并且即使我已经处理了异常并且没有破坏我的循环,也永远不会产生值4.为什么这样做?

python

4
推荐指数
1
解决办法
97
查看次数

南无法创建新字段,因为字段不存在

我正在尝试使用South将新的URLField添加到模型中,例如:

class Document(models.Model):
    text = models.TextField()
    reference_page = models.URLField(blank=True, null=True)
    source_page = models.URLField(blank=True, null=True) # new field
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,python manage.py schemamigration myapp --auto我得到错误:

DatabaseError: column myapp_document.source_page does not exist
LINE 1: ...ext", "myapp_document"."reference_page", "myapp_doc...
Run Code Online (Sandbox Code Playgroud)

我正在使用PostgreSQL作为我的数据库后端.我正确地初始化了我的南方应用程序,并且已经为它运行了迁移.我确保我的Django和South安装是最新的.

为什么现在会给我这个错误?

编辑:奇怪的是,如果我手动创建数据库中的列,则schemamigration调用成功,但当然migrate调用失败,直到我手动删除列.这很奇怪.

python django django-south

4
推荐指数
1
解决办法
1109
查看次数

在Python中不重复计算排列

我有两个项目列表:

A = 'mno'
B = 'xyz'
Run Code Online (Sandbox Code Playgroud)

我想生成所有排列,无需替换,模拟将A中项目的所有组合替换为B中的项目,而不重复.例如

>>> do_my_permutation(A, B)
['mno', 'xno', 'mxo', 'mnx', 'xyo', 'mxy', 'xyz', 'zno', 'mzo', 'mnz', ...]
Run Code Online (Sandbox Code Playgroud)

这对我来说是直截了当的,但是我知道Python的starndard itertools模块,我相信它可能已经实现了这一点.但是,我无法识别实现此确切行为的函数.我可以用这个模块来完成这个功能吗?

python python-itertools

4
推荐指数
1
解决办法
1576
查看次数

稀疏hstack的Scipy错误

尝试将密集和稀疏数据与scipy.spare.hstack合并时,偶尔会遇到错误:

Traceback (most recent call last):
  File "hstack_error.py", line 3, in <module>
    X = scipy.sparse.hstack(hstack_parts)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/construct.py", line 263, in hstack
    return bmat([blocks], format=format, dtype=dtype)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/construct.py", line 329, in bmat
    raise ValueError('blocks must have rank 2')
ValueError: blocks must have rank 2
Run Code Online (Sandbox Code Playgroud)

重现此代码的最少代码是:

import scipy.sparse
hstack_parts = [[[0.17968359700312667, -0.23497267759562843, 5.5625, 12.0, 12.0, -0.3514978725245902, 4.562932312249999, 7.578125000000001, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, -1.0, -1.0, -1.0], [0.43775723232977204, -0.04553734061930783, 4.486910994764398, 12.0, 12.0, -0.33614476914571956, 2.8162986569528794, 4.74869109947644, 0.0, 0.0, 0.0, 0.0, 0.0, …
Run Code Online (Sandbox Code Playgroud)

python scipy

4
推荐指数
1
解决办法
3085
查看次数

如何让 SGDClassifier 反映不确定性

您如何让sklearn 的SGDClassifier预测显示不确定性?

我试图确认SGDClassifier将报告 50% 的输入数据的概率,这些数据不严格对应于任何标签。但是,我发现分类器始终是 100% 确定的。

我正在使用以下脚本对此进行测试:

from sklearn.linear_model import SGDClassifier

c = SGDClassifier(loss="log")
#c = SGDClassifier(loss="modified_huber")

X = [
    # always -1
    [1,0,0],
    [1,0,0],
    [1,0,0],
    [1,0,0],

    # always +1
    [0,0,1],
    [0,0,1],
    [0,0,1],
    [0,0,1],

    # uncertain
    [0,1,0],
    [0,1,0],
    [0,1,0],
    [0,1,0],
    [0,1,0],
    [0,1,0],
    [0,1,0],
    [0,1,0],
]
y = [
    -1,
    -1,
    -1,
    -1,
    +1,
    +1,
    +1,
    +1,

    -1,
    +1,
    -1,
    +1,
    -1,
    +1,
    -1,
    +1,
]

def lookup_prob_class(c, dist):
    a = sorted(zip(dist, c.classes_))
    best_prob, best_class …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

4
推荐指数
1
解决办法
1906
查看次数

如何在Ubuntu上构建pysparse

当我尝试安装pysparse via时pip install pysparse==1.3-dev,构建失败并显示错误:

pysparse/sparse/src/spmatrixmodule.c:4:22: fatal error: spmatrix.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这些类型的错误通常是一些缺少系统开发包的结果,但谷歌搜索没有显示"spmatrix"的任何内容.我尝试安装python-sparse包,它确实提供了这个文件,但我仍然得到同样的错误.

我该如何解决?

python ubuntu sparse-matrix

4
推荐指数
1
解决办法
985
查看次数

Django 1.8中的手动提交

你如何@commit_manually在Django 1.8中实现?

我正在尝试升级Django 1.5代码以使用Django 1.8,并且由于一些奇怪的原因,commit_manually装饰器在Django 1.6中被移除而没有直接替换.我的进程遍历数千条记录,因此它不能将整个进程包装在单个事务中而不会耗尽内存,但仍需要在事务中对某些记录进行分组以提高性能.为此,我有一个用@commit_manually包装的方法,每N次迭代调用transaction.commit().

我无法从文档中确切地说出来,但这似乎仍然得到了支持.我只需要打电话set_autocommit(False)而不是有一个方便的装饰.它是否正确?

python django django-models

4
推荐指数
1
解决办法
3015
查看次数

无法从 git 删除符号链接

我不小心在我的 git 存储库中提交了一个符号链接。当我删除它链接到的文件,然后删除符号链接本身时,如果我尝试在 Egit 中提交删除,我现在会收到一般错误“执行添加命令期间捕获异常”。git commit如果我尝试从命令行运行,我只会得到输出:

Changes not staged for commit:
typechange: /path/to/old/symlink
Run Code Online (Sandbox Code Playgroud)

为什么 git 无法提交此更改?

git

4
推荐指数
1
解决办法
7200
查看次数

使用神经网络估计图像中的距离

使用神经网络估计静止图像或视频流中的距离是否可行?

我有一个激光游侠取景器,可提供视频输出以及距离测量。但是,距离测量需要将激光照射到环境中,这并不总是理想的或不允许的。我希望有一个选项可以将其切换为“被动”模式,在该模式下,图像被馈送到神经网络,然后该神经网络可以提供距离估计,而无需激活激光器。最初,网络将在活动模式下从测距仪对图像+距离对进行训练。

我不是神经网络专家,尽管Google发现神经网络在图像分类和姿态估计方面有很多用途,但我找不到用于距离估计的任何现有技术。这看似可行,还是我在浪费时间?每N像素一个输入的基本前馈网络是否足够?还是需要其他架构?

algorithm neural-network

4
推荐指数
1
解决办法
2263
查看次数