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

Я искал решение для получения возвращаемых значений функции, которая выполняется в запланированное время.Вот пример функции.

def get_data(dir):
    df = pd.DataFrame()
    file_name = "nofile"
    # The rest of the body of the code executes and updates the two variables df and file_name
    return df, file_name

Что я хочу сделать, это запланировать эту функцию на 6:00 утра.Если _file_name_ остается «nofile» после выполнения «get_data ()» в 6:00 AM, функция должна быть повторно выполнена в 6:00 PM.Вот так

 def sched():
    # Schedule at 6 AM
    # Here I cannot get the file_name as return value of get_data()
    if file_name == "nofile":
        # Schedule at 6 PM
        file_name = "nofile"

Я понятия не имею, как это сделать с помощью APScheduler.Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Итак, после долгих раздумий и мыслей по совету Алекса я разобрался с этим.Вот решение моей проблемы.Функция, которую я хотел запланировать, выглядит примерно так:

def get_data(dir):
    df = pd.DataFrame()
    file_name = "nofile"
    # The rest of the body of the code executes and updates the two variables df and file_name
    return df, file_name

Решение:

from apscheduler.schedulers.background import BackgroundScheduler

if __name__ == "__main__":
    sched = BackgroundScheduler()

    @sched.scheduled_job('cron', hour=6, minute=0, second=0, timezone='Europe/Paris')
    def run_db1():
        download_directory = "D:/random_data"
        if not os.path.exists(download_directory):
            download_directory = os.mkdir(download_directory)

        df, flnom = get_data(download_directory)
        print("1st check")
        if flnom == 'nofile':
            @sched.scheduled_job('cron', hour=18, minute=0, second=0, timezone='Europe/Paris')
            def run_db2():
                download_directory = "D:/random_data"
                if not os.path.exists(download_directory):
                    download_directory = os.mkdir(download_directory)
                df, flnom = get_data(download_directory)
                print("2nd check")
                flnom = "nofile"

                return df, flnom

        return df, flnom

    sched.start()

Моя первоначальная проблема заключается в загрузке данных с ftp-сервера, если новый файл загружен насервер СЕГОДНЯ.ЕСЛИ файл существует, то имя_файла будет обновляться;в противном случае он останется как «nofile» и будет проверен позже в тот же день.Спасибо всем, кто внес свой вклад.

0 голосов
/ 19 сентября 2019

Лучшее решение, которое я могу придумать, это использование глобальной переменной.Запланируйте, чтобы ваша функция всегда выполнялась в 18:00 (18:00) и используйте значение глобальной переменной, чтобы проверить, должна ли она что-либо делать.

...