使用多线程创建Django模型

时间:2017-08-14 12:08:23

标签: python django multithreading django-models

我的Django应用程序需要一个后台线程,每60秒执行一次并从名为“rawdata”的模型中读取条目,然后根据数据运行一些计算,并在另一个名为“results”的模型中生成一条新记录。

在做了一些研究后,我意识到这可以用芹菜来完成,但我觉得完整的异步任务框架对于我需要的东西来说有点过分。我是Django的新手,我正在尝试确定下面的实现是否安全。

我的应用程序使用Django的“ready”钩子启动后台进程,如下所示:

class Myapp(AppConfig):
    name = 'Myapp'
    ready_done = False

        def ready(self):
            if os.environ.get('RUN_MAIN') and Myapp.ready_done==False:
                from scripts.recordgen import RecordGenerator
                Myapp.ready_done=True
                Myapp.record_generator = RecordGenerator()

在app目录中,我有一个/scripts/recordgen.py,它产生一个基本的独立线程,每60秒向数据库添加一个新数据。像这样:

import threading
import time
from Myapp.models import results,rawdata

class RecordGenerator(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        while (1):
            time.sleep(60)

            #Query the rawdata here and do some calculations
            #Just filling with dummy data for this example
            dummydata = "dummy data"

            new_record = results()
            new_record.data = dummydata
            new_record.save()

如果记录只添加到此线程的结果表中,并且只通过Django视图读取,更新和删除,那么这是一个线程安全的实现吗?我正在使用的数据库是Postgre。

0 个答案:

没有答案