ilnur
а мне надо по кругу чтобы выполнялась эта функция.
while True: get1() time.sleep(1)
ilnur
а мне надо по кругу чтобы выполнялась эта функция.
while True: get1() time.sleep(1)
import threading import time print 'start' def get1(): while True: print u'hello' time.sleep(1.0) t = threading.Thread(target=get1) t.start()
def Timer(*args, **kwargs): return _Timer(*args, **kwargs) class _Timer(Thread): """Call a function after a specified number of seconds: t = Timer(30.0, f, args=[], kwargs={}) t.start() t.cancel() # stop the timer's action if it's still waiting """ def __init__(self, interval, function, args=[], kwargs={}): Thread.__init__(self) self.interval = interval self.function = function self.args = args self.kwargs = kwargs self.finished = Event() def cancel(self): """Stop the timer if it hasn't finished yet""" self.finished.set() def run(self): self.finished.wait(self.interval) if not self.finished.is_set(): self.function(*self.args, **self.kwargs) self.finished.set()
ilnurОна тормозит не прогу, а тред, в котором она работает. С таким же успехом ты можешь запихнуть в отдельный тред бесконечный цикл со sleep. Больше мне сказать нечего, пока ты не поделишься мыслью, что же конкретно ты хочешь сделать и чем не устраивают варианты, которые я привел.
она тормозит прогу
odnochlenвроде поделился же.
пока ты не поделишься мыслью,
EBFEэх. пока не отгадаю :(
Отгадайте, что использует threading.Timer
ilnurМногопоточность для этого и существует (конечно можно упорно изобретать велосипеды и обходится без этих новомодных штучек
и так далее. если использовать слип, то прога просто встанет.
)эх. пока не отгадаюА чем не устраивают:
import threading def get1(): threading.Timer(4.0, get1).start() print "hello" get1()
def get1():
while True:
time.sleep(1.0)
print "hello"
t = threading.Thread(target = get1)
t.start()
import time import threading class MyScheduler(threading.Thread): def __init__(self, start_time, interval, target, *args): super(MyScheduler, self).__init__() if start_time is not None: self._start = self.from_string(start_time) else: self._start = time.time() + interval self.interval = interval self.target = target self.args = args self.daemon = True def run(self): sleep_time = max(0, self._start - time.time()) time.sleep(sleep_time) while True: self.target(*self.args) time.sleep(self.interval) def from_string(self, time_str): return time.mktime(time.strptime(time_str, "%d.%m.%y %H:%M:%S")) def printer(arg): print arg MyScheduler("13.08.12 18:29:20", 2.0, printer, "hello").start() MyScheduler("10.10.01 10:11:12", 4.0, printer, "hello").start() MyScheduler(None, 3.0, printer, "hello").start()
EBFEЯ так и предлагал.def get1(): while True: time.sleep(1.0) print "hello" t = threading.Thread(target = get1) t.start()
odnochlenнет. я явно пришел с таким вопросом из pys60
Человек явно пришел с яваскрипта
def get1(): print "hello" t.after(10, get1) t = e32.Ao_timer() t.after(10, get1)
EBFEон устраивает. я же писал в первом посте. но если его заюзать, будет же всегда создаваться новый класс threading.Timer() что будет постоянно уменьшать оперативку, не?
А чем не устраивают:import threading def get1(): threading.Timer(4.0, get1).start() print "hello" get1()