django模型是否安全?

时间:2014-10-07 11:21:24

标签: python django django-1.7

我曾经使用基于django的前端填充数据库,然后使用我的守护程序软件中的数据直接访问mysql数据库。

现在我想直接将django模型集成到守护进程软件中,以便更容易开发。

所以写了这个课:

class DjangoMysqlConnector:
  def __init__(self,SystemLogger=False):
    path_list = ["/home/user/django/bildverteiler_project/", "/home/user/git/apps/"]

    for path in path_list:
      if path not in sys.path:
        sys.path.append(path)

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bildverteiler_project.settings")
    django.setup()

    from bildverteiler import models
    self.models = models

  def get_all_servers(self):
    return models.Server.objects.all()
  def get_all_verteilers(self):
    return models.Verteiler.objects.all()

现在我想知道:这个线程安全吗?

我可以从该类创建一个对象并将其传递给多个线程吗?

当我添加写入数据库的函数时,这仍然是正确的吗?

1 个答案:

答案 0 :(得分:1)

您需要详细说明线程安全的含义。如果您不打算使用锁,那么它当然不是线程安全的。例如,

s = SomeModel.objects.get(pk=1)
s.field = 2
s.save()
如果3个线程同时执行它,那么

显然不一致。但是,SomeModel.objects.filter(pk=1).update(field=2)实际上是线程安全的。使用transaction.atomic()来保持线程安全。虽然,可能会出现产生大量线程并同时连接到数据库的问题,但请确保您可以按计划打开任意数量的连接。

执行此操作的有效方法是让一个线程执行所有数据库交互,而其他线程正在执行计算或任何计划。传递Queue上的对象以进行同步。