Запускать функцию в определенное время с использованием Python - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь запустить функцию один раз в определенное время. Я использовал мой код:

import pytz
import datetime
import time

def test_1():

    print("Working_1")


def test_2():

    print("Working_2")


while True:

    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')

    if current_time == '2019-03-18T19:00:36Z':

        test_1()

        current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')


        if current_time > '2019-03-18T19:00:36Z':

            break

        if current_time == '2019-03-18T19:00:36Z':

            test_2()


            current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')


            if current_time > '2019-03-18T19:00:36Z':

                break

Когда я запускаю свой код, он запускает первую функцию, а затем вторую до конечного состояния.

Я хочу, чтобы функция выполнялась в указанное время в операторе if.

Я думаю, что проблема заключается в том, как циклы вложены. Я пробовал несколько конфигураций оператора if и условия разрыва, но просто не могу его получить.

Любая помощь будет высоко ценится, ура. Сэнди

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

Я полагаю, что ваш код здесь не работает, потому что для этого потребуется ТОЧНО указанная метка времени, а при учете времени выполнения, даже если оно минимальное, это совершенно нереально.Возможное решение состоит в том, чтобы дать «временную подушку», то есть окно вокруг времени выполнения, а не точное соответствие для оператора if;однако это все еще весьма ненадежно.

Если вы не возражаете против использования внешнего модуля, я бы рекомендовал вам взглянуть на sched или APScheduler .Я лично использовал последний, и он прекрасно работает.

1 голос
/ 18 марта 2019

Насколько я понимаю, что вы хотите: вы хотите, чтобы обе функции выполнялись по порядку, в определенное время, да?Должно работать что-то намного более простое, например:

current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
while current_time < '2019-03-18T19:00:36Z':
    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
test_1()
test_2()

Это запустит обе функции, как только часы достигнут или пройдут заданное вами время.

РЕДАКТИРОВАТЬ: Есливы хотите, чтобы они запускались в два разных времени:

current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
while current_time < '<first_time>':
    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
test_1()
while current_time < '<second_time>':
    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
test_2()

(где <first_time> первый в хронологическом порядке)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...