python 3.7 включил выполнение сна до отрицательного значения - PullRequest
0 голосов
/ 16 октября 2018

Пересмотренный вопрос

Есть ли способ с использованием протектора и sched для создания цикла for, где вы запускаете скрипт ровно каждую секунду, перепрыгивая между 3 ступенями постоянно столько времени, сколько вам нужноЭто похоже на

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 миллисекунд до следующей секунды

Iпротестировали, и 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()

1 Ответ

0 голосов
/ 29 октября 2018

Это было самое близкое, что я мог получить к тому, что я хотел, так как я знал, что код, который нужно вызывать и запускать каждую секунду, и я знал, что для его запуска требуется от 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 и удаления одного из двух

...