我的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。