Python论坛  - 讨论区

标题:[python-chinese] 多线程程序的SQLite数据库锁定原因?

2007年02月06日 星期二 20:12

gashero harry.python在gmail.com
星期二 二月 6 20:12:37 HKT 2007

最近写一个多线程程序,发现有时会出现如下异常:
OperationalError: database is locked
我使用SQLite3,不知会是什么原因导致这个异常。我在测试中发现,不论是哪里的cur.execute()语句都有可能弹出这个异常。出现这个异常之后过一会自己就又好了,这个时间大概是10秒之下,因为是多线程程序,具体多少秒我也不知道。
谢谢。

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年02月06日 星期二 20:22

feihu feihu.list在gmail.com
星期二 二月 6 20:22:12 HKT 2007

sqlite对多线程支持的不是很好。我们在用VC开发时也经常碰到问题。有一个方案
是多线程使用同一数据库链接。
> 最近写一个多线程程序,发现有时会出现如下异常:
> OperationalError: database is locked
> 我使用SQLite3,不知会是什么原因导致这个异常。我在测试中发现,不论是哪里的cur.execute()语句都有可能弹出这个异常。出现这个异常之后过一会自己就又好了,这个时间大概是10秒之下,因为是多线程程序,具体多少秒我也不知道。
> 谢谢。

-- 
feihu <feihu.list在gmail.com>


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年02月06日 星期二 20:24

gashero harry.python在gmail.com
星期二 二月 6 20:24:32 HKT 2007

没有听懂如何实现,但是如果在Python中多个线程共享同一个数据库连接会抛出一个ProgrammingError。说是不允许操作另外一个线程中创建的连接。

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年02月06日 星期二 22:17

3751 lwm3751在gmail.com
星期二 二月 6 22:17:30 HKT 2007

这个是会这样的,所以在对它修改的时候总是要进行同步的。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070206/55caf57d/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年02月06日 星期二 22:20

3751 lwm3751在gmail.com
星期二 二月 6 22:20:24 HKT 2007

cur.execute()抛出异常只是在insert update
delete这3个语句是会发生,selete并不会有问题。问题的关键是你对数据库文件多线程修改时没有同步。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070206/ac8c580d/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年02月06日 星期二 23:49

gashero harry.python在gmail.com
星期二 二月 6 23:49:29 HKT 2007

还是没有听的很懂,那是不是需要在INSERT、UPDATE、DELETE这三个语句执行时也加个锁?

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年02月06日 星期二 23:52

3751 lwm3751在gmail.com
星期二 二月 6 23:52:06 HKT 2007

是的,我在那些地方加锁同步以后就好了。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070206/36247afe/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年02月07日 星期三 08:48

Marco marco在waven.com
星期三 二月 7 08:48:56 HKT 2007

多线程加锁是肯定的,

但是如果确定任意时刻只有一个线程访问,可以在连接时,加一个选项

self.con = sqlite.connect(self.db_file, check_same_thread=False)

On 2/6/07, 3751 <lwm3751在gmail.com> wrote:
> 是的,我在那些地方加锁同步以后就好了。
>


-- 
LinuX Power

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号