首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存到线程内的数据库

问保存到线程内的数据库
EN

Stack Overflow用户
提问于 2015-07-24 13:44:31
回答 2查看 262关注 0票数 0

我和django一起工作

我有一个线程,它的目的是获取数据库项的排队列表并修改它们。

这是我的模型:

代码语言:javascript
复制
class MyModel(models.Model):
    boolean = models.BooleanField(editable=False)

有问题的代码:

代码语言:javascript
复制
def unqueue():
    while not queue.empty():
        myList = queue.get()
        for i in myList:
            if not i.boolean:
                break
            i.boolean = False
            i.save()   # <== error because database table is locked
        queue.task_done()


queue = Queue()

thread = Thread(target=unqueue)
thread.start()

def addToQueue(pk_list): # can be called multiple times simultaneously
    list = []
    for pk in pk_list:
        list.append(MyModel.objects.get(pk=pk))
    queue.put(list)

我现在密码丢失了很多支票等等..。我简化这里是为了让它更清楚

如何才能在线程内保存到我的数据库?

编辑:我需要同步,因为i.boolean (和我真实代码中的其他属性)不能被覆盖

我试图在数据库中创建一个专用的表,但是它没有工作,我仍然有相同的问题

编辑2:我应该准确地说我使用的是SQLite3。我试图查看是否可以在SQLite中解锁/锁定特定的表,而且似乎锁定只适用于整个db。这可能就是为什么使用专用表没有帮助的原因。

这对我很不利,因为我需要同时从不同的线程访问不同的表,这有可能吗?

编辑3:看来我的问题是这里列出的问题,https://docs.djangoproject.com/en/1.8/ref/databases/#database-is-locked-errors

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-27 11:48:59

我找到的解决办法是改变数据库,

SQLite不允许这样的一致访问。

我换了MySql,现在起作用了

票数 0
EN

Stack Overflow用户

发布于 2015-07-24 14:20:09

您确定需要同步队列吗?可能是异步解决方案会解决您的问题吗?Need a thread-safe asynchronous message queue

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31612185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档