如何在不多次调用的循环内执行异步函数?

时间:2019-11-04 11:37:29

标签: python loops asynchronous python-asyncio

我目前正在编写一个程序,其中有一个True 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 :(得分:0)

如果只需要执行异步函数以在完成后再次调用它,则可以再次使函数本身调用:

def async_func():
    # do stuff
    async_func()

async_func()

您只需调用一次函数,并且每次完成时都会调用自身。这样,您可以实现与使用无限while循环时相同的行为,但是您可以在再次调用该函数之前完成该函数,甚至可以中断自身。

相关问题