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

python-3.x - 在 Python 中关闭 asyncio 事件循环会导致异常结束

对于在 Windows 上的 Python 3.4 中使用 asyncio 和 aiohttp 的 https 请求,我需要使用 2 个事件循环。用于运行 shell 命令的 ProactorEventLoop,以及用于 HTTPS 请求的默认事件循环。不幸的是,ProactorEventLoop 不适用于 HTTPS 命令。

下面的代码显示了当我使用新创建的默认事件循环并尝试在 Windows 上最后关闭它时会发生什么。如果我在最后调用,我会在最后得到异常,loop.close如下所示:

将其注释掉会消除异常,我不知道为什么。唯一的

谢谢,格林杰

0 投票
4 回答
11402 浏览

python - asyncio - 如何在信号处理程序中使用协程?

我正在开发一个使用 python3.4 中的 asyncio 进行网络的应用程序。当此应用程序完全关闭时,节点需要与集线器“断开连接”。此断开连接是一个需要网络连接的活动过程,因此循环需要等待此过程完成才能关闭。

我的问题是使用协程作为信号处理程序将导致应用程序不关闭。请考虑以下示例:

如果您运行此示例,然后按 Ctrl+C,则不会发生任何事情。问题是,如何让信号和协程发生这种行为?

0 投票
3 回答
2630 浏览

python - 迭代 asyncio.coroutine

我最近一直在玩弄 asyncio,虽然我开始对它的工作原理有了直觉,但有些事情我做不到。我不确定这是否是因为我的构造错误,或者是否有原因使我尝试做的事情没有意义。

简而言之,我希望能够迭代产生的 asyncio.coroutine。例如,我希望能够执行以下操作:

但是,这会从 asyncio 的内部引发异常。我已经尝试过其他的东西,比如for n in (yield from countdown(5)): ...但这也给出了类似的不透明运行时异常。

我不能立即明白为什么你不应该做这样的事情,但我已经达到了我理解正在发生的事情的能力的极限。

所以:

  • 如果可以做到这一点,我该怎么做?
  • 如果不可能,为什么不呢?

如果这个问题不清楚,请告诉我!

0 投票
1 回答
5693 浏览

django - 使用 asyncio 的异步信号

我的模型后处理使用post_save信号:

this_takes_forever例程执行 IO,因此我想推迟它以避免过多阻塞请求。

我认为这是新的asyncio模块的一个很好的用例。但我很难完全理解整个过程。

我想我应该能够像这样调整信号接收器:

Providedthis_takes_forever也适用于协程。

这听起来太神奇了。事实上,它停止了AssertionError

我不知道在这种情况下我应该从哪里开始循环。有人尝试过这样的事情吗?

0 投票
2 回答
2609 浏览

python - 异步中的奇怪 AssertionError

我正在尝试使用以下代码通过超时标记未来完成:

"Timer" loop.call_later 在 3 秒后将结果设置为未来。它有效,但我也遇到了异常:

这个 AssertionError 是什么意思?我做错了什么设置由loop.call_later完成的未来?

0 投票
3 回答
12685 浏览

python - 等效于带有工作“线程”的 asyncio.Queues

我试图弄清楚如何移植一个线程程序以使用asyncio. 我有很多围绕几个标准库同步的代码Queues,基本上是这样的:

一个线程创建值(可能是用户输入),另一个线程对它们进行处理。关键是这些线程在有新数据之前处于空闲状态,此时它们会醒来并对其进行处理。

我正在尝试使用 asyncio 来实现这种模式,但我似乎无法弄清楚如何让它“运行”。

我的尝试或多或少看起来像这样(并且根本不做任何事情)。

我尝试过使用协程的变体,不使用它们,在任务中包装东西,试图让它们创建或返回期货等。

我开始认为我对应该如何使用 asyncio 有错误的想法(也许这种模式应该以我不知道的不同方式实现)。任何指针将不胜感激。

0 投票
0 回答
1423 浏览

sockets - python的异步和工作进程之间的共享套接字

是否可以使用 python 的 asyncio 模块在多个工作进程之间共享一个套接字?

下面是一个启动服务器侦听端口 2000 的示例代码。当建立连接并且客户端发送字符串“S”时,服务器开始向客户端发送数据。但这一切只发生在一个 cpu 核心上。我怎样才能重写这个例子来利用所有的 cpu 内核?我查看了 asyncio 子进程模块,但不确定是否可以使用它来共享套接字,以便服务器可以同时接受来自多个工作进程的并行连接。

0 投票
1 回答
3372 浏览

python - 如何在 Asyncio 中列出文件?

我希望能够在不阻塞的情况下获取文件列表,但我没有在文档中看到这样做的方法。在执行程序中执行此操作是最好的方法吗?

0 投票
2 回答
1586 浏览

python-asyncio - 如何使用 asyncio 接口阻塞和非阻塞代码

我正在尝试在事件循环之外使用协程函数。(在这种情况下,我想在 Django 中调用一个也可以在事件循环中使用的函数)

如果不使调用函数成为协程,似乎没有办法做到这一点。

我意识到 Django 是为阻塞而构建的,因此与 asyncio 不兼容。尽管我认为这个问题可能会帮助正在过渡或使用遗留代码的人。

就此而言,它可能有助于理解异步编程以及为什么它不适用于阻塞代码。

0 投票
2 回答
8120 浏览

python - Asyncio 中的请求 - 关键字参数

我正在使用带有requests模块的asyncio来发出异步 HTTP 请求。

我可以发出这样的 GET 请求:

但是,我需要在请求中支持 Basic HTTP Auth(在此处描述)。

根据文档,urlauth都是 requests.get() 的命名参数。

但是,如果我运行它(注意添加url=''auth = ''):

我收到此错误:

在 asyncio.run_in_executor() 的原型中,支持附加参数:

requests.get() 明确支持命名参数(get、auth 等)。怎么了?