如何不与asyncio循环等待?

电子足够

这是一个玩具示例,该示例使用asyncio和aiohttp从多个网站下载主页:

import asyncio
import aiohttp

sites = [
    "http://google.com",
    "http://reddit.com",
    "http://wikipedia.com",
    "http://afpy.org",
    "http://httpbin.org",
    "http://stackoverflow.com",
    "http://reddit.com"
]


async def main(sites):
    for site in sites:
        download(site)


async def download(site):
    response = await client.get(site)
    content = await response.read()
    print(site, len(content))


loop = asyncio.get_event_loop()
client = aiohttp.ClientSession(loop=loop)
content = loop.run_until_complete(main(sites))
client.close()

如果运行它,则会得到:

RuntimeWarning: coroutine 'download' was never awaited

但我不想等待。

在扭曲中我可以做到:

for site in sites:
    download(site)

而且,如果我没有明确地“屈服”或在返回的Deferred中添加回调,它就不会阻塞也不会抱怨。我无法访问结果,但是在这种情况下,我不需要它。

在JS中,我可以执行以下操作:

site.forEarch(site){
    donwload(site)
}

再说一次,它不会阻塞,也不需要我做任何事情。

我找到了一种方法:

async def main(sites):
    await asyncio.wait([download(site) for site in sites])

但:

  • 找出来确实不明显。我很难记住。
  • 很难理解它的作用。“ waits”似乎是在说“ i block”,但并未清楚地表明它阻塞了整个协程列表。
  • 你不能传递一个生成器,它必须是一个真实的列表,我觉得在Python中这很自然。
  • 如果我只能等待一个人怎么办?
  • 如果我根本不想等待任务,只计划执行它们,然后继续执行我的其余代码怎么办?
  • 它比JS解决方案更冗长。

有更好的方法吗?

Jashandeep Sohi
  • 找出来确实不明显。我很难记住。

协程的文档确实使asyncio.wait目的很清楚

  • 很难理解它的作用。“ waits”似乎是在说“ i block”,但并未清楚地表明它阻塞了整个协程列表。

同样,请参阅文档。

  • 你不能传递一个生成器,它必须是一个真实的列表,我觉得在Python中这很自然。

再次,请参阅文档,特别是 asyncio.as_completed

  • 如果我只能等待一个人怎么办?

它仍然应该工作。

  • 如果我根本不想等待任务,只计划执行它们,然后继续执行我的其余代码怎么办?

然后就可以使用了asyncio.ensure_furture实际上,它asyncio.wait是一个便利函数asyncio.ensure_future(和其他逻辑)。

  • 它比JS解决方案更冗长。

也许吧,但这并不是一件坏事(从我的角度来看)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何不与AudioServicesPlaySystemSound振动(1336)

来自分类Dev

asyncio的事件循环如何知道可等待的资源何时就绪?

来自分类Dev

如何不与EditText中的按钮上的文本重叠?

来自分类Dev

没有 asyncio 的 Python 3.6 异步等待:如何编写自己最简单的事件循环?

来自分类Dev

如何不获得循环依赖?

来自分类Dev

NET Core 3中如何不与RestSharp一起使用代理

来自分类Dev

如何不重复wordpress循环/查询?

来自分类Dev

如何创建循环(水平不与参考重叠时)

来自分类Dev

如何测量asyncio事件循环的长度?

来自分类Dev

路由器使用相同的公共IP地址,如何不与其他设备冲突?(NAT)

来自分类Dev

如何使用 asyncio 等待套接字的错误/关闭事件?

来自分类Dev

如何使用嵌套的foreach循环等待异步/等待完成

来自分类Dev

alias_method如何不创建无限循环?

来自分类Dev

这个for循环如何不按顺序执行其迭代器?

来自分类Dev

如何不通过循环键入来获取数组?

来自分类Dev

JSLint:如何不在循环中执行此功能

来自分类Dev

给文件名增加数字,如何不循环?

来自分类Dev

循环更改列-如何不将列$与$ i错误

来自分类Dev

Python asyncio 等待任务

来自分类Dev

如何等待forEach循环结束

来自分类Dev

如何在线程循环内等待

来自分类Dev

如何在for循环内等待响应?

来自分类Dev

XmlHttprequest : 如何不让服务器等待下一个请求

来自分类Dev

如何在Python中使用aiohttp或asyncio创建并行循环?

来自分类Dev

做循环在SAS,但不与宏

来自分类Dev

我如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

如何使用asyncio.Future将基于事件的通信转换为异步/等待

来自分类Dev

如何让我的asyncio客户端调用套接字服务器并等待响应

来自分类Dev

如何在 Python 3 asyncio 中实现同步等待回调?

Related 相关文章

  1. 1

    如何不与AudioServicesPlaySystemSound振动(1336)

  2. 2

    asyncio的事件循环如何知道可等待的资源何时就绪?

  3. 3

    如何不与EditText中的按钮上的文本重叠?

  4. 4

    没有 asyncio 的 Python 3.6 异步等待:如何编写自己最简单的事件循环?

  5. 5

    如何不获得循环依赖?

  6. 6

    NET Core 3中如何不与RestSharp一起使用代理

  7. 7

    如何不重复wordpress循环/查询?

  8. 8

    如何创建循环(水平不与参考重叠时)

  9. 9

    如何测量asyncio事件循环的长度?

  10. 10

    路由器使用相同的公共IP地址,如何不与其他设备冲突?(NAT)

  11. 11

    如何使用 asyncio 等待套接字的错误/关闭事件?

  12. 12

    如何使用嵌套的foreach循环等待异步/等待完成

  13. 13

    alias_method如何不创建无限循环?

  14. 14

    这个for循环如何不按顺序执行其迭代器?

  15. 15

    如何不通过循环键入来获取数组?

  16. 16

    JSLint:如何不在循环中执行此功能

  17. 17

    给文件名增加数字,如何不循环?

  18. 18

    循环更改列-如何不将列$与$ i错误

  19. 19

    Python asyncio 等待任务

  20. 20

    如何等待forEach循环结束

  21. 21

    如何在线程循环内等待

  22. 22

    如何在for循环内等待响应?

  23. 23

    XmlHttprequest : 如何不让服务器等待下一个请求

  24. 24

    如何在Python中使用aiohttp或asyncio创建并行循环?

  25. 25

    做循环在SAS,但不与宏

  26. 26

    我如何让我的asyncio客户端调用套接字服务器并等待响应

  27. 27

    如何使用asyncio.Future将基于事件的通信转换为异步/等待

  28. 28

    如何让我的asyncio客户端调用套接字服务器并等待响应

  29. 29

    如何在 Python 3 asyncio 中实现同步等待回调?

热门标签

归档