Форум сайта python.su
22
привет.
нужен таймер. как я понял мне нужно threading.Timer
import threading print 'start' def get1(): print u'hello' t = threading.Timer(1.0, get1) t.start()
RuntimeError: threads can only be started once
import threading a=1 def get1(): global a if a!=5: a+=1 print u'hello' t = threading.Timer(1.0, get1) t.start() else: pass get1()
Отредактировано ilnur (Авг. 13, 2012 13:16:59)
Офлайн
1
Заюзайте Queue.
Метод Queue.put может юзать таймаут
http://docs.python.org/library/queue.html
Офлайн
22
это кажись для 3 питона. нужна под второй
Офлайн
1
ilnur
жись для 3 питона. нужна под второй
Офлайн
568
# -*- coding:utf-8 -*- import Queue q = Queue.Queue(maxsize=1) timeout=2 iters=5 def foo(i): print i q.put(None) for i in range(iters): try: q.put(foo(i), timeout=timeout) except: print "Waiting"
Офлайн
14
ZerstorenКак-то через попчанский.
Заюзайте Queue.
Метод Queue.put может юзать таймаут
Отредактировано odnochlen (Авг. 13, 2012 15:12:59)
Офлайн
22
time.sleep()? он тормозит основной поток программы.
Офлайн
14
Да, но ты вызываешь в таймере функцию, которая запускает таймер. Можешь обьяснить, зачем тебе это надо? 
Офлайн
22
мне нужно выполнить функцию через время, в зависимости от параметров, может потребоваться ещё раз выполнить функцию.
цикл со sleep не катит
примерно такой код
def get(): # здесь что-то делается if i=0: # и если что-то не так, запустить таймер, который через время выполнит эту функцию # если написать t.start() то получаю ошибку t = threading.Timer(1.0, get) t.start()
Отредактировано ilnur (Авг. 13, 2012 16:21:50)
Офлайн
22
odnochlenпотому что если юзать это
Да, но ты вызываешь в таймере функцию, которая запускает таймер. Можешь обьяснить, зачем тебе это надо?
import threading print 'start' def get1(): print u'hello' t = threading.Timer(1.0, get1) t.start()
Отредактировано ilnur (Авг. 13, 2012 16:59:35)
Офлайн