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

因此,我试图编写一个使用django作为ORM的应用程序,因为它既需要做一些后台处理,也需要一个易于使用的前端。它的核心功能是在高CPU进程(基本上是蒙特卡罗模拟)中处理数据库中的数据,我想实现多处理,特别是使用池(我得到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

有了这样的代码,我会得到间歇的DatabaseErrors或PicklingErrors。前者通常是“格式错误的数据库”或“与MySQL服务器的连接丢失”,后者通常是“无法pickle model.DoesNotExist”。它们是随机的,任何进程都会发生,当然数据库本身也没有问题。如果我设置了pool = Pool(proccesses=1),那么它可以在一个线程中正常运行。我还输入了各种打印语句,以确保大多数语句都在运行。

我还将test更改为:def test(child):

x=[]

s= random()

sleep(random())

for i in range(100):

x.append(child.parent.id)

return x

这只会使每次迭代在运行前暂停不到一秒,而且一切都很好。如果我把随机间隔降到500米左右,它就会开始起作用。可能是并发问题吧?但只有4个进程命中。我的问题是如何在不提前大量转储数据的情况下解决这个问题?我已经用SQLite和MySQL对其进行了测试,但都遇到了问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值