Django: Сигнал на queryset.update

Псевдокод для этого таков:

FPS_WANTED = 25 
(just a number, it can be changed while executing, or it can be constant)

TIME_OF_DRAWING = 1000/FPS_WANTED 
(this is in milliseconds, I believe it is accurate enough) 
( should be updated when FPS_WANTED changes)

UntilTheUserLeavesTheDrawingApplication()
{

  time1 = getTime();
  doAnimation();
  time2 = getTime();
  animationTime = time2-time1;

  if (animationTime > TIME_OF_DRAWING)
  {
     [the FPS_WANTED cannot be reached]
     You can:
     1. Decrease the number of FPS to see if a lower framerate can be achieved
     2. Do nothing because you want to get all you can from the CPU
  }
  else
  {
     [the FPS can be reached - you can decide to]
     1. wait(TIME_OF_DRAWING-animationTime) - to keep a constant framerate of FPS_WANTED
     2. increase framerate if you want
     3. Do nothing because you want to get all you can from the CPU
  }

}

Конечно, могут быть вариации этого, но это основной алгоритм, который действует в любом случае анимации.

10
задан Dominic Rodger 7 November 2009 в 14:23
поделиться

1 ответ

Возможно, должно, но это не так. .update () не вызывает метод .save () для отдельных объектов в QuerySet, а вместо этого обновляет все за один вызов SQL (UPDATE, как это бывает) . Поскольку он не использует .save () , было бы непоследовательно вызывать сигналы до и после сохранения. Я, конечно, могу представить себе варианты использования, в которых кто-то может этого захотеть, но я также могу представить себе случаи, в которых этого не делать. Мне кажется, что не вызывать сигналы до и после сохранения - это правильное поведение, поскольку это оставляет больше гибкости для программиста. Эти сигналы нетрудно активировать вручную, и я думаю, что это так »

8
ответ дан 4 December 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: