问题标签 [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.
python-3.x - 在 Python 中关闭 asyncio 事件循环会导致异常结束
对于在 Windows 上的 Python 3.4 中使用 asyncio 和 aiohttp 的 https 请求,我需要使用 2 个事件循环。用于运行 shell 命令的 ProactorEventLoop,以及用于 HTTPS 请求的默认事件循环。不幸的是,ProactorEventLoop 不适用于 HTTPS 命令。
下面的代码显示了当我使用新创建的默认事件循环并尝试在 Windows 上最后关闭它时会发生什么。如果我在最后调用,我会在最后得到异常,loop.close
如下所示:
将其注释掉会消除异常,我不知道为什么。唯一的
谢谢,格林杰
python - asyncio - 如何在信号处理程序中使用协程?
我正在开发一个使用 python3.4 中的 asyncio 进行网络的应用程序。当此应用程序完全关闭时,节点需要与集线器“断开连接”。此断开连接是一个需要网络连接的活动过程,因此循环需要等待此过程完成才能关闭。
我的问题是使用协程作为信号处理程序将导致应用程序不关闭。请考虑以下示例:
如果您运行此示例,然后按 Ctrl+C,则不会发生任何事情。问题是,如何让信号和协程发生这种行为?
python - 迭代 asyncio.coroutine
我最近一直在玩弄 asyncio,虽然我开始对它的工作原理有了直觉,但有些事情我做不到。我不确定这是否是因为我的构造错误,或者是否有原因使我尝试做的事情没有意义。
简而言之,我希望能够迭代产生的 asyncio.coroutine。例如,我希望能够执行以下操作:
但是,这会从 asyncio 的内部引发异常。我已经尝试过其他的东西,比如for n in (yield from countdown(5)): ...
但这也给出了类似的不透明运行时异常。
我不能立即明白为什么你不应该做这样的事情,但我已经达到了我理解正在发生的事情的能力的极限。
所以:
- 如果可以做到这一点,我该怎么做?
- 如果不可能,为什么不呢?
如果这个问题不清楚,请告诉我!
django - 使用 asyncio 的异步信号
我的模型后处理使用post_save
信号:
该this_takes_forever
例程执行 IO,因此我想推迟它以避免过多阻塞请求。
我认为这是新的asyncio模块的一个很好的用例。但我很难完全理解整个过程。
我想我应该能够像这样调整信号接收器:
Providedthis_takes_forever
也适用于协程。
这听起来太神奇了。事实上,它停止了AssertionError
:
我不知道在这种情况下我应该从哪里开始循环。有人尝试过这样的事情吗?
python - 异步中的奇怪 AssertionError
我正在尝试使用以下代码通过超时标记未来完成:
"Timer" loop.call_later 在 3 秒后将结果设置为未来。它有效,但我也遇到了异常:
这个 AssertionError 是什么意思?我做错了什么设置由loop.call_later完成的未来?
python - 等效于带有工作“线程”的 asyncio.Queues
我试图弄清楚如何移植一个线程程序以使用asyncio
. 我有很多围绕几个标准库同步的代码Queues
,基本上是这样的:
一个线程创建值(可能是用户输入),另一个线程对它们进行处理。关键是这些线程在有新数据之前处于空闲状态,此时它们会醒来并对其进行处理。
我正在尝试使用 asyncio 来实现这种模式,但我似乎无法弄清楚如何让它“运行”。
我的尝试或多或少看起来像这样(并且根本不做任何事情)。
我尝试过使用协程的变体,不使用它们,在任务中包装东西,试图让它们创建或返回期货等。
我开始认为我对应该如何使用 asyncio 有错误的想法(也许这种模式应该以我不知道的不同方式实现)。任何指针将不胜感激。
sockets - python的异步和工作进程之间的共享套接字
是否可以使用 python 的 asyncio 模块在多个工作进程之间共享一个套接字?
下面是一个启动服务器侦听端口 2000 的示例代码。当建立连接并且客户端发送字符串“S”时,服务器开始向客户端发送数据。但这一切只发生在一个 cpu 核心上。我怎样才能重写这个例子来利用所有的 cpu 内核?我查看了 asyncio 子进程模块,但不确定是否可以使用它来共享套接字,以便服务器可以同时接受来自多个工作进程的并行连接。
python - 如何在 Asyncio 中列出文件?
我希望能够在不阻塞的情况下获取文件列表,但我没有在文档中看到这样做的方法。在执行程序中执行此操作是最好的方法吗?
python-asyncio - 如何使用 asyncio 接口阻塞和非阻塞代码
我正在尝试在事件循环之外使用协程函数。(在这种情况下,我想在 Django 中调用一个也可以在事件循环中使用的函数)
如果不使调用函数成为协程,似乎没有办法做到这一点。
我意识到 Django 是为阻塞而构建的,因此与 asyncio 不兼容。尽管我认为这个问题可能会帮助正在过渡或使用遗留代码的人。
就此而言,它可能有助于理解异步编程以及为什么它不适用于阻塞代码。
python - Asyncio 中的请求 - 关键字参数
我正在使用带有requests模块的asyncio来发出异步 HTTP 请求。
我可以发出这样的 GET 请求:
但是,我需要在请求中支持 Basic HTTP Auth(在此处描述)。
根据文档,url和auth都是 requests.get() 的命名参数。
但是,如果我运行它(注意添加url=''和auth = ''):
我收到此错误:
在 asyncio.run_in_executor() 的原型中,支持附加参数:
requests.get() 明确支持命名参数(get、auth 等)。怎么了?