Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2012 12:30:44

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

threading.Timer

odnochlen
когда функция не успеет завершиться до повторного срабатывания таймера
+
Кстати! Как компенсировать время выполнения функции?
Так это не баг, а фича

import threading
import time
def get1():
    threading.Timer(1.0, get1).start()
    time.sleep(2.0)
    print "hello"
=> выполняется 1 раз в секунду
А так, да, согласен - нечто большее, чем принт хелло и проблемы скорее всего будут “очень занимательными”. Зато велосипед для гонки клевый

будет же всегда создаваться новый класс threading.Timer() что будет постоянно уменьшать оперативку, не?
Мусоросборщик подберет.

Офлайн

#2 Авг. 14, 2012 13:29:20

Zerstoren
От:
Зарегистрирован: 2011-07-11
Сообщения: 17
Репутация: +  1  -
Профиль   Отправить e-mail  

threading.Timer

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



Офлайн

#3 Авг. 14, 2012 14:26:10

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

threading.Timer

Мусоросборщик подберет.
я извиняюсь, а что он подберет? Ни одной ссылки нету, да и внутри функции же…

Офлайн

#4 Авг. 14, 2012 15:32:31

Zerstoren
От:
Зарегистрирован: 2011-07-11
Сообщения: 17
Репутация: +  1  -
Профиль   Отправить e-mail  

threading.Timer

dimy44
я извиняюсь, а что он подберет? Ни одной ссылки нету, да и внутри функции же…
Вот именно по этому, он ее и подберет.



Офлайн

#5 Авг. 14, 2012 17:02:50

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

threading.Timer

Zerstoren
Вы всегда можете использовать некое публичное хранилище состояния (просто глобальная переменная)
В которой будет описано состояние отработки треда.
Можно, конечно, лок добавить, или еще что-то, но зачем?


Так все-таки
odnochlen
Кстати! Как компенсировать время выполнения функции? Можно сделать так, чтобы интервал между вызовами был как можно ближе к паузе (естественно, если это время меньше ее)?
-> чтобы ошибка не накапливалась. Без таймера тут никак?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version