Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Timer (scheduler) в python 
:(
    Опции темы
Cheloveck
Дата 5.12.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Перерыл все интернеты, ничего хорошего не нашёл.
Нужно выполнять функцию каждые n секунд. При этом рабочий поток должен работать и функция должна выполняться в рабочем потоке.
Если использовать PyQt4, то можно сделать так
Код

self.__timer = QTimer()
self.connect(self.__timer, SIGNAL("timeout()"), self.timerEvent)
self.__timer.start(1000)

В стандартной библиотеке python есть класс treading.Timer, но эта штука срабатывает только один раз. Я попробовал вызывать Timer.run из обработчика, так у меня через 3 минуты 31 секунду таймер сдох с вываливанием эксцепшена (что-то о максимальной глубине чего-то там).
Вопрос, есть ли человеческий тамер в python?

Это сообщение отредактировал(а) Cheloveck - 5.12.2010, 17:27


--------------------
user posted image
PM Jabber   Вверх
Daevaorn
Дата 5.12.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Цитата(Cheloveck @  5.12.2010,  18:26 Найти цитируемый пост)
Перерыл все интернеты, ничего хорошего не нашёл.

http://docs.python.org/library/sched.html
PM MAIL WWW   Вверх
Cheloveck
Дата 5.12.2010, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(Daevaorn @  5.12.2010,  17:45 Найти цитируемый пост)
http://docs.python.org/library/sched.html 

Я его пробовал, он поток вешает (останавливает)


--------------------
user posted image
PM Jabber   Вверх
Pfailed
Дата 5.12.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: нет
Всего: 39



signal.alarm() ?


--------------------
PM MAIL   Вверх
Cheloveck
Дата 5.12.2010, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(Pfailed @  5.12.2010,  21:12 Найти цитируемый пост)
signal.alarm() ? 

Неа.
Цитата

Any previously scheduled alarm is canceled (only one alarm can be scheduled at any time).

http://docs.python.org/library/signal.html#signal.alarm
Мне может понадобится несколько таймеров.


Это сообщение отредактировал(а) Cheloveck - 5.12.2010, 22:31


--------------------
user posted image
PM Jabber   Вверх
senkler
Дата 10.12.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.10.2010

Репутация: нет
Всего: нет



Привет, нашел такой пример в сети . Надеюсь тебе поможет ! 

Код

import threading
import time

class ClockThread(threading.Thread):
    def __init__(self.interval):
        threading.Thread.__init__(self)
        self.daemon = True
        self.interval = interval
    def run(self):
        while True:
            print("Time : %s" % time.ctime())
            time.sleep(self.interval)

t = ClockThread(15)
t.start()


PM MAIL   Вверх
Cheloveck
Дата 10.12.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(senkler @  10.12.2010,  19:25 Найти цитируемый пост)
Надеюсь тебе поможет ! 


Цитата(Cheloveck @  5.12.2010,  17:26 Найти цитируемый пост)
При этом рабочий поток должен работать и функция должна выполняться в рабочем потоке.

 smile

Добавлено через 1 минуту и 46 секунд
Я, конечно, понимаю, что можно устроить свою очередь сообщений и читать её из рабочего потока, в то время, когда таймер будет работать у себя. Но, неужели нет в python простого таймера, типа виндового SetTimer/KillTimer?


--------------------
user posted image
PM Jabber   Вверх
bilbobagginz
Дата 12.12.2010, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



Цитата(Cheloveck @  5.12.2010,  16:26 Найти цитируемый пост)
Нужно выполнять функцию каждые n секунд. При этом рабочий поток должен работать и функция должна выполняться в рабочем потоке.

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

если я правильно понял, то создай вне рабочего потока поток с таймерами, который будет посылать сигнал/ы
а рабочий поток будет обрабатывать это сигнал/ы.

ессно, надо будет как-то аккуратно проработать момент, что ты обрабатываешь сигнал одного таймера, и в это время к тебе стучится второй..




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Cheloveck
Дата 12.12.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(bilbobagginz @  12.12.2010,  01:26 Найти цитируемый пост)
или я недопонял ?

Ну, мне нужны какие-то сообщения, сигнал итп.
Цитата(bilbobagginz @  12.12.2010,  01:26 Найти цитируемый пост)
оздай вне рабочего потока поток с таймерами, который будет посылать сигнал/ы
а рабочий поток будет обрабатывать это сигнал/ы.

Я специально проверял, в венде SetTimer не создаёт поток. Таймер работает где-то в ядре. Как создать таймер в отдельном потоке я знаю. Но странно, что его нет в стандартной библиотеке.




--------------------
user posted image
PM Jabber   Вверх
bilbobagginz
Дата 13.12.2010, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317



Цитата(Cheloveck @  12.12.2010,  10:58 Найти цитируемый пост)
Я специально проверял, в венде SetTimer не создаёт поток.

что-то там создается,  но меня другой вопрос интересует: какая тебе на фих разница: создается поток или нет ?
проясни требования .....



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Cheloveck
Дата 13.12.2010, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(bilbobagginz @  13.12.2010,  01:31 Найти цитируемый пост)
 какая тебе на фих разница: создается поток или нет ?

принципиальная =)

Цитата(bilbobagginz @  13.12.2010,  01:31 Найти цитируемый пост)
проясни требования .....

Обсервер. Объект рассылает уведомления подписчикам, в том числе и о таймауте.


--------------------
user posted image
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.