如何在Google云函数上使用Python asyncio?

如何在Google云函数上使用Python asyncio?,python,google-cloud-functions,Python,Google Cloud Functions,我有一个由HTTP请求触发的google云函数,它执行以下两项任务: def task1(): do sth return info def task2(info): do sth def main(request) info=task1() if (info): task2(info) return info 我希望函数在不等待task2完成的情况下返回。所以我做了以下改变: import asyncio def task1(): do sth

我有一个由HTTP请求触发的google云函数,它执行以下两项任务:

def task1():
  do sth
  return info

def task2(info):
  do sth
  
def main(request)
  info=task1()
  if (info):
    task2(info)
  return info
我希望函数在不等待task2完成的情况下返回。所以我做了以下改变:

import asyncio

def task1():
  do sth
  return info

async def task2(info):
  do sth

async def bar(info):
  return await task2(info)
  
def main(request)
  info=task1()
  if (info):
    asyncio.run(bar(info))
  return info

不确定我做的是否正确?但是我没有注意到函数变得更快了。有人能给我一些建议吗?

协同程序是为了利用CPU并发处理而设计的。通常,当您可以调用URL并等待响应时,会有时间(毫秒)。您可以使用未使用的CPU电源来处理另一个协程,而不是什么都不做。它效率更高,理想情况下,最大处理时间等于最慢的协程(在我的示例中是API调用)


在您的示例中,没有等待,没有CPU什么都不做的时间(睡眠、URL调用),因此您无法利用并发过程。此外,您需要有2个或更多的协同程序才能看到并发执行的好处。

如果这是您测试的唯一代码,我认为您不会注意到太多的差异(除非调用中发生了大量的处理)。另外,在同一线程中运行另一个asyncio事件循环时,无法调用run()。可能会成为未来的瓶颈。谢谢你的回复。实际上,我的两个任务都包括几个rest调用。我想看看云函数是否可以在不等待task2完成的情况下返回task1的结果给调用方,因为task2大约需要3秒钟才能完成。