在螺纹应用程序中使用django orm的最佳实践



我正在处理一个多线程应用程序,该应用程序将django orm与mySQL一起使用。这个想法是使用单个启动脚本来启动多个模块(从功能意义上讲"模块",而不是字面意义上的python sissice(,每个模块都有一个"服务循环",该"服务循环"以其自己的线程运行。我已经使用每个模块的单个类组织了它。

我最初是使用sqlite db做到的,它效果很好。现在,我正在过渡到MySQL,并且正在遇到与线程相关的DB连接问题。例如,看来我需要在每个线程中调用db.connect.close_all((以避免与DB连接的争夺?我认为我需要将与Django Orm相关的所有设置移至服务线程,但是我将无法在类的init((方法中导入模型。

无论如何,我敢肯定其他人以前已经处理过这个问题,而且我敢肯定那里有一些不错的模式。任何人都可以分享任何建议或最佳实践吗?

这是我简单的启动脚本:

from controller.modules.manager import Manager
from controller.modules.scanner import Scanner
print("Starting...")
# The directory scanner
scanner = Scanner()
# The job manager
manager = Manager()

这是其中一个模块(扫描仪类(的示例:

import os
from multiprocessing import Process
from time import sleep
import threading
import django
# Need to do this before importing models
from common.utilities.os import OS
os.environ["DJANGO_SETTINGS_MODULE"] = "common.settings"
django.setup()
# Import models here
class Scanner:
    def __init__(self):
        # Define some member variables here, some of which include
        # DB models
        # Launch service loop
        Process(target=self.service_loop, name='service loop').start()
    def service_loop(self):
        while True:
            # Scan some directories and update some DB entries
            # Throttle the loop
            sleep(config.THROTTLE_SLEEP_TIME_SEC)

已解决。经过无数小时的实验和谷歌搜索,我终于找到了我在这里寻找的东西。我从python的螺纹台上继承了模块类,并解决了所有问题。

最新更新