Форум сайта python.su
26
Есть две функции func1() и func2(), первая должна работать все время через определенный промежуток времени k, вторая должна запускать только один раз в сутки в примерно установленное время my_time_client
import time, datetime k = 1 my_time_client = '06:14' def my_time(): now_time = datetime.datetime.now() my_hour = str(now_time.hour) my_minute = str(now_time.minute) if len (my_hour) == 1 : my_hour = '0' + my_hour if len (my_minute) == 1 : my_minute = '0' + my_minute my_time = my_hour + ":"+ my_minute return my_time def func1(): print 'func1' def func2(): print 'func2' while True: start = time.time() func1() if my_time() == my_time_client: func2() finish = time.time() print (k*60-(finish-start)) time.sleep (k*60-(finish-start))
Офлайн
33
На скриптовых языках нельзя делать планировщики с точным расписанием, т.к. они не обладают достаточной гарантированной точностью.
Офлайн
26
Lexander
На скриптовых языках нельзя делать планировщики с точным расписанием, т.к. они не обладают достаточной гарантированной точностью.
Офлайн
33
Lexander
На скриптовых языках нельзя делать планировщики с точным расписанием, т.к. они не обладают достаточной гарантированной точностью.
ajib6eptmy_hour = str(now_time.hour) my_minute = str(now_time.minute) if len (my_hour) == 1 : my_hour = '0' + my_hour if len (my_minute) == 1 : my_minute = '0' + my_minute my_time = my_hour + ":"+ my_minute
datetime.datetime.now().strftime('%H:%M')
Отредактировано Budulianin (Ноя. 24, 2013 15:03:42)
Офлайн
33
ajib6eptОна неопределенная.
А какая возможна погрешность при работе?
Офлайн
33
ajib6ept
А какая возможна погрешность при работе?
Офлайн
33
Зато с помощью скриптовых языков можно вызывать системные утилиты и настраивать их как угодно.
Внутри программы имеет смысл использовать таймеры до 15 минут.
Все что больше - отдавать на откуп системе.
При этом максимальное время выбирается исходя из объема данных, которые некритично накопить в случае пропуска нескольких точек отсчета.
Например, некритична передача пакета данных на удаленный сервер десятков килобайт раз минуту.
А вот если этих данных мегабайты, то время нужно уменьшать.
Офлайн
26
Budulianin
Если надо что-то по расписанию делать, то для этого есть cron
Офлайн
20
Может как-то так:
# python2.7 import sys import time import random def func1(max_work_time=30*60): # симуляция работы stop_time = time.time() + random.randint(5, max(5, max_work_time)) while time.time() < stop_time: sys.stdout.write('.') sys.stdout.flush() time.sleep(1) print def func2(): func1(60) next_launch_time = None def shedule_next_launch_time(): global next_launch_time next_launch_time = time.time() + 15*60 while True: func1() if next_launch_time is None or next_launch_time <= time.time(): shedule_next_launch_time() func2() # ...
Отредактировано bw (Ноя. 24, 2013 22:06:18)
Офлайн
31
когда то так делал
from time import sleep from datetime import datetime time_start1 = ('19:54','06:00','20:30','12:45') time_start2 = ('13:44','03:00','23:30','10:45') while True: d = datetime.today() #print d.strftime('%H:%M') time_x = d.strftime('%H:%M') if time_x in time_start1: print "start func_1" sleep(59) if time_x in time_start2: print "start func_2"
Отредактировано sanodin (Ноя. 24, 2013 19:56:56)
Офлайн