asyncio create_task 永远运行

2024-02-06

我有以下代码

import asyncio

loop = asyncio.get_event_loop()

async def while_loop():
    n = 0
    while True:
        print(f"{n}")
        await asyncio.sleep(2)
        n = n+1

async def some_func():
    await asyncio.sleep(5)
    print("Some Func")

future = loop.create_task(while_loop())
loop.run_until_complete(some_func())

我预计while_loop函数永远运行,但它似乎只是作为调用的结果执行run_until_complete并且它停止打印 while 循环一次some_func执行完毕。我看到的输出是:

0
1
2
Some Func

我预计这些数字即使在之后也会继续打印some_func完成了。

0
1
2
Some Func
3
4
5
6
.
.
.

打印更多号码的唯一方法是致电some_func again.


我预计这些数字即使在之后也会继续打印some_func完成了。

论点为run_until_complete控制事件循环运行的时间。一旦事件循环停止运行,all协程实际上被挂起,而不仅仅是您一直在等待的那个。但你确实有不同的选择:

  • loop.run_until_complete(some_func())- 您已经使用过的;运行事件循环直到some_func协程结束。在此期间也并行执行其他协程,但也会在事件循环完成后立即停止执行它们。

  • loop.run_forever() https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.run_forever- 运行事件循环,直到调用某些协程或回调loop.stop()。如果它们都不这样做,那么即使所有协程都结束,事件循环也不会停止。在你的情况下你会打电话loop.create_task(while_loop())其次是loop.create_task(some_func())进而loop.run_forever().

  • loop.run_until_complete(asyncio.gather(while_loop(), some_func()))运行事件循环直到both指定的协程完成。这个(等all任务)显然是你所期望的loop.run_until_complete()即使您只命名一个,也会自动执行,但它不会像那样工作,一旦指定的协程完成,它就会停止。asyncio.gather https://docs.python.org/3/library/asyncio-task.html#asyncio.gather可用于同时等待多个协程。有关等待的更精细控制,另请参阅asyncio.wait https://docs.python.org/3/library/asyncio-task.html#asyncio.wait.

由于您的协程之一会永远运行,因此最后两个选项将是等效的,并将产生预期的输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asyncio create_task 永远运行 的相关文章

随机推荐

  • 自定义 Spinner TextView 被切断

    因此 在随附的屏幕截图和代码示例中 您可以看到我的自定义微调器 正如你所看到的 无论我尝试做什么 我的文字都会被切断 九个补丁图像设置正确 其上也有文本填充 我几乎拥有一切权利 却完全不知所措 定制旋转器
  • 我可以训练它来检测我的脸吗?或任何其他人面临

    我想创建一个应用程序 在其中捕获我家人的图像并检测它是谁 我可以使用 Vision API 创建云数据库来存储每个家庭成员的不同照片并标记他们的名字 这样当我从 API 提取请求时 它会扫描数据库中的图像并检测它是哪个家庭成员 而不仅仅是检
  • 诺基亚 220 s30+ 开发

    我只是想问我如何为具有 s30 平台的诺基亚 220 开发应用程序 有没有办法为此开发应用程序 看来答案是否定的 尽管名字如此 S30 https en wikipedia org wiki Series 30 2B不相关S30 https
  • PHP 是同步还是异步?

    考虑 这里 getYears 在另一个文件中 它正在获取一个查询 我在用着 list years在文件中view php 这里是同步还是异步 这段代码是程序化的 所以getYears 总是在之前执行require once view php
  • 使用 New-PSDrive 映射网络驱动器时出现问题

    我正在运行一个基于 powershell 的多线程应用程序 其中每个线程 net 任务 需要使用不同的凭据将一堆文件从一台计算机复制到另一台计算机 这是在每个 net 任务中运行的脚本 New PSDrive Name tid PSProv
  • 有没有办法获得 deque 的内部存储大小作为 vector::capacity ?

    据我了解 deque和vector都保留了一些增长空间 vector capacity 能够获取向量的内部保留空间 双端队列标准中没有这样的成员 有什么方法可以获取这些信息吗 您必须深入研究实现才能弄清楚这一点 的版本std dequegc
  • 使用 javascript 代替 Iframe 源?

    我知道我无法从浏览器中隐藏 iframe 源 检查元素 但我想通过使用 javascript 作为源 url 使 它们 难以窃取 url iframe 如果我有 我可以改变吗 www youtube com embed xxxxxxx用Ja
  • 以编程方式更改中心 X / Y 对齐约束的乘数

    如何以最简单的方式以编程方式更改乘数 对于斯威夫特 2 0 因此 对于 Y 如果将图像的顶部设置为等于 superView 的顶部 常量为 0 然后输入此代码 IBOutlet weak var topc NSLayoutConstrain
  • BPEL 中的 Restful Web 服务调用

    我的问题是 有没有什么方法可以让我在 BPEL 中使用 Google Map 或 Youtube 等静态 Web 服务 我知道 BPEL 可与具有 WSDL 文件的 SOAP Web 服务配合使用 但是 我要求做一个项目 其中应包含与 BP
  • Django 存储网站内容

    我对网络开发有点陌生 并且无法理解网站内容的存储方式 即使在查看了开源项目之后 我仍然感到困惑 假设我有一个包含多个段落的网页 我希望最终能够通过 Django 管理页面进行编辑 现在 我已经为页面设置了视图 但我不确定模型应该如何构建 到
  • 如何使用 CloudKit.js 查询 nil 值?

    使用 CloudKit js 如何构建匹配字段为零的项目的查询 我尝试过的每个排列都会失败 要么它明显匹配字符串值 即 null 或 nil 要么如果我实际上尝试传递 null 它会抛出错误 有任何想法吗 以下均无效 filterBy fi
  • 异步加载 iframe

    我有一个网页指向另一个网站 我不希望这阻止页面其余部分的加载 有没有办法异步加载它 使用 jQuery 可以实现以下效果 where url是一些网址
  • Windows 10 - 自定义协议在通过其他方法工作时从 JavaScript 调用时失败

    我成功地在注册表中定义了一个自定义协议 名为FDMyAlbsIF 该协议旨在调用批处理文件 根据接收到的参数执行不同的操作 我现在面临两个问题 通过 Windows 资源管理器调用协议时 即在路径字段中输入字符串FDMyAlbsIF AAA
  • 如何提高从 2 个表中进行选择的 SQL 查询的性能

    请帮我 如何加快这个sql查询 SELECT pa FROM ParametrickeVyhladavanie pa SELECT p FROM produkty p WHERE p KATEGORIA IN categoryArray p
  • ASP.NET Core 2.1根据DB中的数据在布局中插入CSS

    我有一个正在努力解决的问题 一些背景 用户可以在我的应用程序中选择应用程序使用哪种配色方案 此选择存储在数据库中 我想做的是基于这个选择 在页面加载时 为用户所做的选择提供 CSS 文件 我一直在尝试做的是通过在 Layout cshtml
  • spring cloud aws多个sqs监听器

    我的项目中有2个sqs监听器 我希望其中之一具有相同的设置 而其中之一具有不同的设置 我想要更改的唯一值是 maxNumberOfMessages 最实用的方法是什么 我想为其中一个侦听器设置不同的 maxNumberOfMessages
  • ViewPager 内的 ListFragments

    我正在写我的第一个基于片段的应用程序并遇到了一些我无法使用 API 或 Stackoverflow 解决的严重问题 我正在使用一个浏览器在两个列表之间滑动 每个列表都有一个header按钮创建一个新的列表元素 类似于本机 Android 闹
  • 如何在页面加载时显示ajax加载gif动画?

    我尝试在我的网站中实现 AJAX 当单击 divchangepass 的内容时 它应该加载changepass template php 这是我为此使用的代码 function changepass click function block
  • 单元测试核心数据 - 异常退出,代码为 134

    我正在为我的核心数据应用程序设置单元测试 我在一个非常简单的测试中遇到了一个奇怪的问题 我收到的错误是 Developer Tools RunPlatformUnitTests include 451 0 Test rig Develope
  • asyncio create_task 永远运行

    我有以下代码 import asyncio loop asyncio get event loop async def while loop n 0 while True print f n await asyncio sleep 2 n