Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在循环中执行异步函数而不多次调用它?_Python_Loops_Asynchronous_Python Asyncio - Fatal编程技术网

Python 如何在循环中执行异步函数而不多次调用它?

Python 如何在循环中执行异步函数而不多次调用它?,python,loops,asynchronous,python-asyncio,Python,Loops,Asynchronous,Python Asyncio,我目前正在编写一个程序,其中有一个while True循环,我想在其中调用两个函数。在调用它们之前,会收集一些信息来确定是否应该调用它们(在函数中我不能这样做)。这些函数需要一些时间来执行,但它们不能中断循环执行(它们应该异步执行)。而且,当每个函数已经有一个实例在运行时,也不能执行它们。我如何实现这一点 我已经研究过asyncio,但不知道如何将其应用于我的问题。 在下面的代码示例中,您可以看到我想象它是如何工作的 def B_sync_func(): 全球B B=正确 #做一些耗时的事情 B

我目前正在编写一个程序,其中有一个while True循环,我想在其中调用两个函数。在调用它们之前,会收集一些信息来确定是否应该调用它们(在函数中我不能这样做)。这些函数需要一些时间来执行,但它们不能中断循环执行(它们应该异步执行)。而且,当每个函数已经有一个实例在运行时,也不能执行它们。我如何实现这一点

我已经研究过asyncio,但不知道如何将其应用于我的问题。 在下面的代码示例中,您可以看到我想象它是如何工作的

def B_sync_func():
全球B
B=正确
#做一些耗时的事情
B=错误
返回
def A_async_func():
全球A
A=正确
#做一些耗时的事情
A=错误
返回
A=错误
B=错误
尽管如此:
信息=数据收集()
如果执行_A(信息)和!A:
A_async_func()
如果执行_B(信息)和!B:
B_async_func()

如果您只需要在异步函数完成后执行要再次调用的异步函数,您只需再次调用函数本身即可:

def async_func():
#做事
异步函数
异步函数

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

您不认为最终达到了最大递归深度,会引发异常吗?是的,您是对的,谢谢您的回答。但这并不能解决我的问题。“我会重新表述我的问题。@马西米兰如果我有什么想法,我会在回家后更新我的答案