如何使用多线程读写?

时间:2015-01-07 18:46:09

标签: python multithreading python-multithreading peewee

美好的一天。请帮我解决一个问题。

使用ORM时,我无法在线程中更新/读取数据。

我一直在使用peewee用于Python。阅读文档后,开始初始化对象以使用数据库。

db = SqliteDatabase('db.sqlite', threadlocals=True)

# Next comes the creation of tables and filling.
class Products(Model):
    id = IntegerField(index=True, primary_key=True)
    count_sales = IntegerField()
    updated = IntegerField() # default to zero

    class Meta:
        database = db

db.connect()
db.create_tables([Products, ...]) # I have several tables

# I continue to fill the table with data from a file
然后我按如下方式创建预定数量的线程:

class MyThread(Thread):
    tables = None
    db = None

    def run(self):
        products_update(self.tables, self.db)

for _ in range(1, 20):
    t = MyThread()
    t.tables = (Products, ...)
    t.db = db
    t.start()

该函数计算字段count sales中的记录数,并且它们是,它随机改变其中一个。

def products_update(tables, db):
    Products, ... = tables

    count = Products.select().where(Products.count_sales < 10, Products.updated == 0).limit(1).count()
    if count:
        row = Products.select().where(Products.count_sales < 10, Products.updated == 0).order_by(random()).limit(1).get()

        Products.update(updated=1).where(Products.id == row.id).execute()

我需要让查找和更新的过程是线性的。

感谢您的关注。我为使用翻译的语言道歉。

0 个答案:

没有答案