问题标签 [python-asyncio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1062 浏览

python - 如何使用 asyncio 在 python3 中运行并行作业?

假设我有这样的课程:

如何在 python 3.4.1 中使用 asyncio 并行创建此类的多个实例?

0 投票
2 回答
3365 浏览

python - Asyncio imap 获取邮件 python3

我正在使用 asyncio 模块进行测试,但是我需要提示/建议如何以异步方式获取大型电子邮件。

我有一个包含邮件帐户用户名和密码的列表。

我想过:

但是,较长的部分是下载电子邮件附件。

电子邮件:

如何以异步方式处理所有(下载附件)邮件?

0 投票
3 回答
10785 浏览

python - Python - 在单独的子进程或线程中运行 Autobahn|Python asyncio websocket 服务器

我有一个在 Python 3.4.1 中运行的基于 tkinter 的 GUI 程序。我在程序中运行了几个线程来从各种 url 获取 JSON 数据。我想添加一些 WebSocket 功能,以允许程序充当服务器并允许多个客户端通过 WebSocket 连接到它并交换其他 JSON 数据。

我正在尝试将 Autobahn|Python WebSocket 服务器用于异步。

我首先尝试在 GUI 程序下的单独线程中运行 asyncio 事件循环。但是,每次尝试都会给出“AssertionError:线程“Thread-1”中没有当前事件循环。

然后我尝试使用标准库多处理包生成一个进程,该包在另一个进程中运行 asyncio 事件循环。当我尝试这个时,我没有得到任何异常,但 WebSocket 服务器也没有启动。

甚至可以在另一个 Python 程序的子进程中运行 asyncio 事件循环吗?

有没有办法将 asyncio 事件循环集成到当前的多线程/tkinter 程序中?

更新 下面是我试图为初始测试运行的实际代码。

其中大部分直接来自 Autobahn|Python 的异步示例代码。如果我尝试将它作为进程运行,它不会做任何事情,没有客户端可以连接到它,如果我运行 netstat -a 则没有使用端口 6900。如果只是在主程序中使用 start_server() 它会创建 WebSocket 服务器。

0 投票
2 回答
4215 浏览

python - Python asyncio 缓冲区和处理数据

我在处理异步事件循环中的一些 CPU 密集型任务时遇到了问题。在处理传入数据的缓冲区并从中构建数据包时,我遇到了麻烦。我尝试使用执行程序来执行 CPU 绑定的工作,但是当从缓冲区中删除数据包时,我无法维护缓冲区的顺序。

我正在寻找一种最佳实践方法来实现以下功能,而无需在事件循环中执行 CPU 绑定任务。

0 投票
1 回答
1445 浏览

python-3.x - asyncio 具有 map&reduce 风格且不会淹没事件循环

我正在尝试在实际应用程序中使用 asyncio,但这并不容易,非常需要 asyncio 专家的帮助。

在没有淹没事件循环的情况下产生其他任务的任务(成功!)

考虑一个任务,比如从一些“播种”网页开始抓取网络。每个网页都会以指数(!)的方式生成新的下载任务。然而,我们既不想让事件循环泛滥,也不想让我们的网络过载。我们想控制任务流程。这是我通过修改此处提出的漂亮的 Maxime 解决方案而取得的成就: https ://mail.python.org/pipermail/python-list/2014-July/687823.html

映射和减少(失败)

好吧,但如果我们已经在 python3 上,我还需要一个非常自然的东西,一种 map() 和 reduce() 或 functools.reduce()。也就是说,我需要为页面链接上完成的所有下载任务调用“汇总”函数。这是我失败的地方:(

我会提出一个过于简单但仍然很好的测试来模拟用例:让我们以无效的形式使用斐波那契函数实现。也就是说,让 coro_sum() 应用在 reduce() 中,而 coro_fib 就是我们在 map() 中应用的。像这样的东西:

这样我们就可以运行以下测试。

对一名工人进行测试#1:

对两名工人进行测试#2:

非常重要的是,每个 coro_fib() 和 coro_sum() 调用都是通过某个 worker 上的 Task 完成的,而不仅仅是隐式产生和不受管理的!

找到对这个非常自然的目标感兴趣的 asyncio 大师会很酷。您的帮助和想法将不胜感激。

此致

瓦莱里

0 投票
1 回答
7025 浏览

python - 如何在事件循环中将协程打包为普通函数?

我正在将asyncio用于网络框架。

在下面的代码中(low_level是我们的低级函数,main块是我们的程序入口,user_func是用户定义的函数):

我想包装low_level正常功能而不是coroutine(forcompatibility等),但low_level在事件循环中。如何将其包装为普通功能?

0 投票
1 回答
2970 浏览

python - 在 python asyncio 上获取第一个可用的锁/信号量

使用 python 3.4 中的新 asyncio,我如何从一组锁/信号量中获取第一个可用的锁/信号量?

我所做的方法是使用wait(return_when=FIRST_COMPLETED),然后在我设法获得一个后取消所有acquire()仍待处理的 s。但我担心这可能会导致微妙的错误/竞争条件,我觉得有一种更优雅的方式来做到这一点。

上面的代码给出(内存地址已编辑):

0 投票
2 回答
7621 浏览

python - Python AsyncIO 的 loop.add_reader() 期望什么文件描述符对象?

我正在尝试了解如何在 Python 3.4 中使用新的 AsyncIO 功能,并且正在努力解决如何使用event_loop.add_reader()。从我发现的有限讨论中,它看起来像是从单独的进程中读取标准,而不是打开文件的内容。真的吗?如果是这样,似乎没有 AsyncIO 特定的方式来集成标准文件 IO,这也是真的吗?

我一直在玩下面的代码。以下输出给出了PermissionError: [Errno 1] Operation not permitted/python3.4/selectors.py 的第 399 行的异常,该异常由下面的行self._epoll.register(key.fd, epoll_events)触发add_reader()

编辑

对于那些正在寻找如何使用 AsyncIO 一次读取多个文件的示例的人,我很好奇,这里有一个如何实现的示例。秘密就在这条线上yield from asyncio.sleep(0)。这实质上会暂停当前函数,将其放回事件循环队列中,以便在所有其他就绪函数执行后调用。函数根据它们的调度方式确定为准备就绪。

0 投票
0 回答
1271 浏览

cookies - 使用 Asyncio 支持会话 cookie

我在 Python 中制作了一个需要与 Asyncio 一起使用的抓取脚本。我还需要它来支持网络 cookie。最初使用 urllib.request 制作,脚本如下所示:

这目前工作正常,但我还需要使用 Asyncio 使其成为多线程。由于我没有找到任何有关它的文档,因此我尝试了以下方法:

作为上下文,我试图抓取的页面是这样制作的,它们在加载时测试会话 cookie 的存在,如果不存在则创建一个,然后重定向到它们自己。现在,通过简单的抓取方法,我陷入了一个循环,并且使用 Asyncio/Aiohttp,什么都不会发生。

0 投票
1 回答
576 浏览

python - Python 的 AsyncIO 可以在现有的 Web 应用程序中使用吗?

我知道 AsyncIO WSGI 插件仍在创建过程中(http://uwsgi-docs.readthedocs.org/en/latest/asyncio.html)。我只是在考虑在现有 Web 项目中使用它的可行性。

似乎第一个问题是在哪里管理事件循环。WSGI 请求是全部在单个线程上完成的,还是它们自己的线程?

我想使用它的一种方法是,如果单个请求具有可以以非阻塞方式执行的多个任务,那可能很有用。例如,如果一个请求需要发出并从网络上的另一个位置检索多个文件。您可以在请求中创建一个事件循环,以便更有效地执行集合非阻塞操作。

这是目前在现有 Web 项目中真正利用 AsyncIO 的唯一方法吗?