Как выполнить асинхронную функцию внутри цикла, не вызывая ее несколько раз? - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я пишу программу, в которой у меня есть цикл True, в котором я хочу вызвать две функции. Перед их вызовом собирается некоторая информация, которая определяет, должны ли они быть вызваны (а я не могу сделать это внутри функций). Для выполнения функций требуется некоторое время, но они не должны прерывать выполнение цикла (они должны выполняться асинхронно). И они также не должны выполняться, когда уже есть экземпляр каждой выполняемой функции. Как я могу это реализовать?

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

def B_sync_func():
    global B
    B = True
    #do time consuming stuff
    B = False
    return

def A_async_func():
    global A
    A = True
    #do time consuming stuff
    A = False
    return

A = False
B = False

while True:
    info = data_gathering()

    if execute_A(info) and !A:
        A_async_func()

    if execute_B(info) and !B:
        B_async_func()

1 Ответ

0 голосов
/ 04 ноября 2019

Если вам просто нужно выполнить асинхронную функцию для повторного вызова после ее завершения, вы можете просто снова вызвать сам вызов функции:

def async_func():
    # do stuff
    async_func()

async_func()

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

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