Как запланировать функцию для работы в качестве фоновой задачи - PullRequest
1 голос
/ 25 февраля 2020

Извиняюсь за мои плохие формулировки, но здесь идет.

Мне нужно выполнять функцию каждые тридцать минут, пока выполняются другие задачи, однако я понятия не имею, как это сделать или перевести в Google. Моя цель состоит в том, чтобы изменить мой сценарий так, чтобы он работал (без пользовательского интерфейса) как программа диспетчера задач с фоновыми службами, программами, утилитами и т. Д.

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

Пример этого будет включать в себя следующее.

def function_1():
    """Perform operations"""
    pass

def function_2():
    """Perform operations"""
    pass

def executeAllFunctions():
    function_1()
    function_2()

Как я могу инициализировать function_1 как фоновую задачу, в то время как function_2 выполняется в обычном порядке?

1 Ответ

0 голосов
/ 25 февраля 2020

Здесь отличный ответ здесь . Основная идея состоит в том, чтобы запустить асин * сопрограмму c в навсегда l oop внутри потока.

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

Пример примера, вдохновленный ответом в ссылке, но адаптированный к вашему вопросу.

@asyncio.coroutine
def function_1():
    while True:
       do_stuff
       yield from asyncio.sleep(1800)

def wrapper(loop):
    asyncio.set_event_loop(loop)
    loop.run_until_complete(function_1())

def function_2():
    do_stuff


def launch():
    loop = asyncio.get_event_loop()  
    t = threading.Thread(target=wrapper, args=(loop,))  # create the thread
    t.start()  # launch the thread

    function_2()
    t.exit() # when function_2 return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...