小编wda*_*hab的帖子

如何处理Python多处理数据库并发,特别是与django?

所以,我正在尝试编写一个使用django作为其ORM的应用程序,因为它需要做一些幕后处理和易于使用的前端.它的核心功能是处理数据库中的数据,在高CPU过程中(基本上是monte carlo模拟),我想实现多处理,特别是使用Pool(我得到4个进程).基本上我的代码就是这样运行的,父代大约有20个孩子:

assorted import statements to get the django environment in the script
from multiprocessing import Pool
from random import random
from time import sleep

def test(child):
    x=[]
    print child.id
    for i in range(100):
        print child.id, i
        x.append(child.parent.id) #just to hit the DB
    return x

if __name__ == '__main__':
    parent = Parent.objects.get(id=1)
    pool = Pool()
    results = []
    results = pool.map(test,parent.children.all())
    pool.close()
    pool.join()
    print results
Run Code Online (Sandbox Code Playgroud)

使用这样的代码,我得到间歇性的DatabaseErrors或PicklingErrors.前者通常是"格式错误的数据库"或"与MySQL服务器失去连接"的形式,后者通常是"不能泡菜型号.DoesNotExist".它们是随机的,随任何进程发生,当然DB本身没有任何问题.如果我设置pool = Pool(proccesses=1)它然后运行,在一个线程就好了.我还会抛出各种打印语句,以确保它们中的大多数实际上都在运行.

我也一直在test改为:

def test(child):
    x=[] …
Run Code Online (Sandbox Code Playgroud)

python sql django pool multiprocessing

10
推荐指数
1
解决办法
5612
查看次数

从多个列表生成一个项目的每个组合

我想采用不确定数量的列表,长度不确定,并生成每个列表中一个元素的每个可能组合.为了效率,我的目的是简单地迭代每个组合,而不是存储结果.

例如,以下列表列表:

[['A','B','C'],['w','x','y','z'],[1,2]]
Run Code Online (Sandbox Code Playgroud)

会成为:

['A','w',1],['A','w',2],['A','x',1],['A','x',2],...,['C','z',1],['C','z',2]
Run Code Online (Sandbox Code Playgroud)

不是拉链,不是很好的itertools.permutation()...如果你提前知道列表的数量,这很容易做到,但在这种情况下,我不会.我相信我可以将这种递归解决方案捆绑在一起,但也许这已经解决了.任何见解?

python combinations list

3
推荐指数
1
解决办法
1606
查看次数

标签 统计

python ×2

combinations ×1

django ×1

list ×1

multiprocessing ×1

pool ×1

sql ×1