【问题标题】:How to take input from one function and use it to make a coroutine?如何从一个函数中获取输入并使用它来制作协程?
【发布时间】:2020-06-26 07:34:59
【问题描述】:

我有一个函数 (func1) 可以检查事件是否发生。如果事件发生,则异步运行另一个函数。并再次重复相同的... (我可能没有很好地解释它的变化,所以拿这个代码)

async def func1(args):
    #check for an event in a while loop with await statements
async def func2(args):
    #main function to do something...
    #this function is also under a while loop with await statements

我想要做的是使用 asyncio 分别为每个事件运行 func2。所以,我创建了另一个函数。

async def func3():
    await asyncio.gather(func2(args))

我对 asyncio 了解不多。我试着用谷歌搜索,发现了一些关于 asyncio.Queue() 的信息。 所以,让我总结一下。我想在循环中检查一个事件,每当该事件发生时,我想为其异步运行 func2,然后再次检查事件(当 func2 仍在运行时),如果事件再次发生,则分别为该事件运行 func2。 我如何将这些功能链接在一起以完成需要的..? 目的:我想从用户那里获取机器人令牌并使用该令牌运行一个单独的机器人。

【问题讨论】:

  • 您有什么理由不使用电视节目的内置方法来处理事件? (即这个docs.telethon.dev/en/latest/basic/updates.html
  • 我想从用户那里获取机器人令牌并使用该令牌运行一个单独的机器人。我怎样才能为此使用内置模块..?

标签: python asynchronous python-asyncio telethon


【解决方案1】:

您可以使用create_task“并行”启动新任务。例如:

async def func1(args):
    ...
    if event_happened:
        asyncio.create_task(func2(args))
    ...

async def func2():
    ...

【讨论】:

  • 谢谢亚历克斯..! ,它按我想要的方式工作。您知道使用这种方法可以创建多少个任务(不应该降低性能)..?
  • @Mayank 您可以根据需要创建任意数量的任务。与线程不同,asyncio 任务不消耗操作系统级别的资源,只消耗一点内存用于簿记。
猜你喜欢
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
相关资源
最近更新 更多