问题标签 [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 投票
0 回答
157 浏览

python - Python 标准库代码中的范围:这些变量怎么可能存在?

我查看了 asyncio 包的__init__.py文件(在 Python 3.4.1 中)并偶然发现了最后几行:

考虑到上面的陈述,当这些名称实际上甚至不应该存在时,他们怎么可能访问events所有其他子模块(及其各自的变量)?据我所见,标准库的目录不是其中的一部分,子模块本身也没有定义变量。__all__from … import *asyncio/sys.pathsubmodule.__all__

附带说明:通过查看__init__.py文件,我真正想知道的是如何将所有子模块的名称自动添加到__all__我的包列表中,__init__.py而不是仅仅重复所有这些名称(因为它在几个标准库的其他包)。我目前的方法如下——也许你的答案会揭示这个asyncio包是如何成功实现这个看起来更像 Python 的把戏的。

0 投票
2 回答
2998 浏览

python - 使用 Python 的 asyncio 按顺序获取数据

我有一个 Python 2.7 程序,它从网站中提取数据并将结果转储到数据库中。它遵循消费者生产者模型,并使用线程模块编写。

只是为了好玩,我想使用新的asyncio模块(从 3.4 开始)重写这个程序,但我不知道如何正确地做到这一点。

最关键的要求是程序必须按顺序从同一网站获取数据。例如,对于 url ' http://a-restaurant.com ',它应该首先得到' http://a-restaurant.com/menu/0 ',然后是 ' http://a-restaurant.com/menu/ 1 ',然后' http://a-restaurant.com/menu/2 ',...如果它们没有被提取以使网站完全停止提供页面,那么您必须从 0 开始。

然而,另一个网站( ' http://another-restaurant.com ' )的另一个获取可以(并且应该)同时运行(其他网站也有连续限制)。

线程模块非常适合这个,因为我可以为每个网站创建单独的线程,并且在每个线程中它可以等待一个页面完成加载,然后再获取另一个页面。

这是线程版本(Python 2.7)的一个非常简化的代码片段:

以下是我尝试使用 asyncio 的方法(在 3.4.1 中):

它以非顺序的顺序获取和打印所有内容。好吧,我想这就是这些协程的全部想法。我不应该使用 aiohttp 而只使用 urllib 获取吗?但是第一家餐厅的抓取是否会阻止其他餐厅的抓取?我只是在想这完全错误吗?(这只是一个尝试按顺序获取东西的测试。还没有到队列部分。)

0 投票
2 回答
2306 浏览

python-3.x - 连接没有通过 Python3 asyncio 并发 HTTP 获取请求关闭

我刚刚开始使用 Python3.4 中的 asyncio 库并编写了一个小程序,尝试一次同时获取 50 个网页。该程序在数百个请求后因“打开的文件过多”异常而崩溃。

我认为我的 fetch 方法使用 'response.read_and_close()' 方法调用关闭了连接。

有什么想法吗?我是否以正确的方式解决这个问题?

我得到的错误是:

0 投票
1 回答
1365 浏览

python - 使用 aiohttp 检测 http 响应编码

我正在尝试学习如何使用asyncio来构建异步网络爬虫。下面是一个粗略的爬虫来测试框架:

虽然asyncio似乎记录得很好,但aiohttp似乎只有很少的文档,所以我正在努力自己解决一些问题。

首先,我们有没有办法检测页面响应的编码?其次,我们可以要求连接在会话中保持活动状态吗?还是默认情况下是这样的requests

0 投票
4 回答
3307 浏览

python - 如何使用 asyncio 从子进程流式传输 stdout/stderr,并在之后获取其退出代码?

在 Windows 上的 Python 3.4 下,我需要使用 Python 3.4 中引入的asyncio框架将由子进程写入 stdout/stderr 的数据流式传输,即接收其输出。之后我还必须确定程序的退出代码。我怎样才能做到这一点?

0 投票
1 回答
1160 浏览

python - Web 套接字服务器的后台任务

我想运行一个网络套接字服务器来为树莓派板提供一个接口。具体来说,我想连续轮询传感器,参考变量处理来自网络套接字的输入,然后在需要时运行电机。

我以为我可以__init__在子类上使用一个方法来WebSocketServerProtocol执行轮询传感器和正在运行的电机,并使用一种onMessage()方法来处理来自客户端的输入并返回系统的当前状态,但是我担心我不正确理解WebSocketServerProtocoland WebSocketServerFactory,我似乎无法让后台任务在连接之间持续存在。

实现我想要的最佳方式是什么?也许高速公路是矫枉过正——在连接的计算机上永远只有一个客户端,所以从这个意义上说并发不是问题。我只是希望电机和轮询传感器的运行不要阻塞以确保平稳运行。

0 投票
1 回答
3412 浏览

python - Python Asyncio 子进程永远不会完成

我有一个简单的 python 程序,我用它来测试带有子进程的 asyncio:

在命令行上运行它会产生所需的结果。

但是,当从 asyncio 调用时,它永远不会完成

ps ax显示这个过程是<defunct>,不知道这意味着什么

0 投票
3 回答
11575 浏览

python - 我可以以某种方式与子进程共享一个异步队列吗?

我想使用队列将数据从父进程传递到通过multiprocessing.Process. 但是,由于父进程使用 Python 的新asyncio库,队列方法需要是非阻塞的。据我了解,asyncio.Queue是为任务间通信而设计的,不能用于进程间通信。另外,我知道multiprocessing.Queueput_nowait()get_nowait()方法,但我实际上需要仍然会阻止当前任务(但不是整个过程)的协程。有没有办法创建包装put_nowait()/的协程get_nowait()?另一方面,multiprocessing.Queue使用内部兼容的线程是否与在同一进程中运行的事件循环完全兼容?

如果没有,我还有什么其他选择?我知道我可以通过使用异步套接字自己实现这样的队列,但我希望我可以避免这种情况……

编辑: 我也考虑过使用管道而不是套接字,但它似乎asynciomultiprocessing.Pipe(). 更准确地说,Pipe()返回不是类文件Connection对象的对象元组。但是,的方法/方法和/都需要类似文件的对象,因此不可能异步读取/写入这样的. 相比之下,包用作管道的通常类似文件的对象根本没有问题,并且可以很容易地与.asyncio.BaseEventLoopadd_reader()add_writer()connect_read_pipe()connect_write_pipe()Connectionsubprocessasyncio

更新: 我决定进一步探索管道方法:我Connection通过multiprocessing.Pipe()检索文件描述符fileno()并将其传递给os.fdopen(). 最后,我将生成的类文件对象传递给事件循环的connect_read_pipe()/ connect_write_pipe()。(如果有人对确切的代码感兴趣,有一些关于相关问题的邮件列表讨论read()。)但是,流给了我一个OSError: [Errno 9] Bad file descriptor并且我没有设法解决这个问题。还考虑到缺少对 Windows 的支持,我不会再继续这样做了。

0 投票
3 回答
4842 浏览

windows - 为什么我在异步事件循环运行时无法捕获 SIGINT?

在 Windows 上使用 Python 3.4.1,我发现在执行asyncio 事件循环时,我的程序不能被中断(即在终端中按 Ctrl+C)。更重要的是,SIGINT 信号被忽略。相反,我已经确定 SIGINT 在不在事件循环中时被处理。

为什么在执行异步事件循环时忽略 SIGINT?

下面的程序应该演示这个问题 - 在终端中运行它并尝试通过按 Ctrl+C 来停止它,它应该继续运行:

请参阅官方(郁金香)邮件列表上的讨论。

0 投票
3 回答
7774 浏览

python - 是否可以从 Python (3.4) 异步查询 SQL Server?

是否可以从 Python (3.4) 对 Microsoft SQL Server 执行异步查询,即在asyncio事件循环的上下文中?

以下是一个骨架 asyncio 程序,其中 (async) SQL 查询应适合该do_it函数: