Пересмотренный вопрос
Есть ли способ, используя прохождение и расписание для создания цикла for, где вы запускаете скрипт ровно через секунду, прыгая между 3 ступеньками постоянно до тех пор, пока вам это нужно. Like
for thread01 in schead:
run at 00:00:01.0000
else(thread02):
run at 00:00:02.0000
else(thread03):
run at 00:00:03.0000
и он постоянно контур смягчает значение дрейфа и отрицательного сна, так как каждый раз, когда код работает на протекторах, ему требуется 1000 миллисекунд для выполнения до следующей секунды
Я тестировал, и session_create постоянно работает между 480 и 530 миллисекундами, чтобы выполнить
Старый код старого кода, который поможет смягчить временный дрейф
from main import session_create
import sched, datetime, threading
def timestamp():
next_call = time.time()
while True:
session_create()
print (datetime.datetime.now())
nextcall = next_call+1;
time.sleep(nextcall - time.time())
timerThread = threading.Thread(target=timestamp)
timerThread.daemon = True
timerThread.start()
Это было самое близкое, что я мог дойти до того, что я хотел, поскольку я знал, что код, который должен был быть вызван и запускаться каждую секунду, и я знал, что требуется от 500 до 600 миллисекунд для запуска.
Я использовал threading.Timer для запуска кода каждые 900 миллисекунд, и это приводит к тому, что код запускается не реже одного раза в секунду и в обход временного дрейфа, который я испытывал.
from Sessions import session
import sched, time, threading
Event_scheduler = sched.scheduler(time.time, time.sleep)
##
start_time = time.time()
def run():
threading.Timer(0.9, run).start()
session()
run()
Нижняя сторона этого - простая математика, каждый N-й второй больной имеет точку, где код запускается дважды (пример 23: 59: 01: 0050 и снова в 23: 59: 01: 0950). Но дополнительные данные легко удаляются путем поиска дубликатов 23:59:01 == 23:59:01 и удаления одного из двух
file.close()
? Потому что структураwith
позаботится о его закрытии.