Python sched.scheduler превышает макс. глубину рекурсии

Вы не можете удалить записи тот путь, при этом основной вопрос - это, Вы не можете использовать подзапрос для определения значения ПРЕДЕЛЬНОГО пункта.

Это работает (протестированный в MySQL 5.0.67):

DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT 42 -- keep this many records
  ) foo
);

промежуточный подзапрос требуется. Без него мы столкнулись с двумя ошибками:

  1. ошибка SQL (1093): Вы не можете указать целевую таблицу 'таблица' для обновления в ИЗ пункта - MySQL не позволяет Вам обращаться к таблице, которую Вы удаляете из прямого подзапроса.
  2. ошибка SQL (1235): Эта версия MySQL еще не поддерживает 'ПРЕДЕЛ & IN/ALL/ANY/SOME подзапрашивают' - Вы не можете использовать ПРЕДЕЛЬНЫЙ пункт в прямом подзапросе оператора NOT IN.

, К счастью, с помощью промежуточного подзапроса позволяет нам обходить оба из этих ограничений.

Nicole указала, что этот запрос может быть значительно оптимизирован для определенных вариантов использования (таких как этот). Я рекомендую читать , которые отвечают также, чтобы видеть, соответствует ли это Вашему.

5
задан user171331 10 September 2009 в 11:20
поделиться

2 ответа

Библиотека триангулированных поверхностей GNU может сделать это за вас . Учтите, что поверхность должна быть закрытой. Это не относится к некоторым 3D-моделям.

Если вы хотите реализовать это самостоятельно, вы можете начать с просмотра их кода.

но это несколько замаскировало бы основную простоту идиомы, поэтому я предпочитаю это простое, открытое использование. Кстати, обратите внимание, что time.time и time.sleep используют секунды, а не минуты в качестве единицы времени, поэтому вам нужно 60, а не одна, чтобы указать «через минуту»; -).

5
ответ дан 14 December 2019 в 01:12
поделиться

Таймер - это однократное событие. Это не может быть выполнено таким способом.

Использование таймера для вызова функции, которая затем создает другой таймер, который вызывает функцию, которая создает таймер, который вызывает функцию, которая создает таймер, ..., должно достичь предела рекурсии .

Вы не упоминаете свою ОС, но «пропуски» или «нерегулярные тики» вызваны двумя причинами.

  1. Ваш компьютер занят, а «1 секунда» означает «довольно близко к 1 секунде, в зависимости от того, что else is going on "

  2. Если вы запускаете таймер на 0,9999 секунды и ждете 1 секунду, вы можете быть на 1. 9999 (округляется до 1) или 2,00000. Может показаться, что он дублирует время или пропускает время. Внутренние аппаратные часы вашего компьютера очень точны, и округление до ближайшей секунды (всегда) приведет к удаленной возможности дублирования или пропусков.

Правильно используйте график. http://docs.python.org/library/sched.html#module-sched

Ваш фрагмент кода также не имеет смысла для sched. Вам не нужно создавать новый объект планировщика. Вам нужно только создать новое событие .

Прочтите http://docs.python.org/library/sched.html#sched.scheduler.enter при создании нового событие для существующего экземпляра планировщика.

и округление значений до ближайшей секунды (всегда) приведет к удаленной возможности дублирования или пропусков.

Правильно используйте график. http://docs.python.org/library/sched.html#module-sched

Ваш фрагмент кода также не имеет смысла для sched. Вам не нужно создавать новый объект планировщика. Вам нужно только создать новое событие .

Прочтите http://docs.python.org/library/sched.html#sched.scheduler.enter при создании нового событие для существующего экземпляра планировщика.

и округление значений до ближайшей секунды (всегда) приведет к удаленной возможности дублирования или пропусков.

Правильно используйте график. http://docs.python.org/library/sched.html#module-sched

Ваш фрагмент кода также не имеет смысла для sched. Вам не нужно создавать новый объект планировщика. Вам нужно только создать новое событие .

Прочтите http://docs.python.org/library/sched.html#sched.scheduler.enter при создании нового событие для существующего экземпляра планировщика.

4
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

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