免责声明:这是我第一次尝试该asyncio
模块。
我使用asyncio.wait
以下方式来尝试支持超时功能,等待一组异步任务的所有结果。这是一个更大的库的一部分,因此我省略了一些不相关的代码。
请注意,该库已经支持提交任务以及使用 ThreadPoolExecutors 和 ProcessPoolExecutors 使用超时,因此我对使用这些选项的建议或关于为什么我使用asyncio
. 上代码...
import asyncio
from contextlib import suppress
...
class AsyncIOSubmit(Node):
def get_results(self, futures, timeout=None):
loop = asyncio.get_event_loop()
finished, unfinished = loop.run_until_complete(
asyncio.wait(futures, timeout=timeout)
)
if timeout and unfinished:
# Code options in question would go here...see below.
raise asyncio.TimeoutError
Run Code Online (Sandbox Code Playgroud)
起初我并不担心在超时时取消挂起的任务,但后来我收到了Task was destroyed but it is pending!
程序退出或loop.close
. 经过一番研究后,我发现了多种取消任务并等待它们实际被取消的方法:
选项1:
[task.cancel() for task in unfinished]
for task in unfinished:
with suppress(asyncio.CancelledError):
loop.run_until_complete(task)
Run Code Online (Sandbox Code Playgroud)
选项2:
[task.cancel() for …
Run Code Online (Sandbox Code Playgroud) 我有一个与我的应用程序负载均衡器关联的 WAF ACL,并且我想更改规则的优先级。我一生都找不到任何有关如何完成此操作的文档,也无法弄清楚如何调整 AWS UI 中的优先级。这是可能的还是我必须以不同的顺序从头开始重新创建我的 ACL?
我有一个 Dockerfile,它执行pip install
AWS 代码工件中的一个包。安装需要身份验证令牌,因此我当前的方法是在构建脚本中生成动态/秘密存储库 URL,并将其作为构建参数传递到 Docker,这会导致我的 Dockerfile 中出现如下行:
ARG CORE_REPO_URL
ARG CORE_VERSION
RUN pip install -i $CORE_REPO_URL mylib_core==$CORE_VERSION
Run Code Online (Sandbox Code Playgroud)
在命令中使用 ARG 会RUN
导致该层永远不会被缓存,因此即使库版本没有更改,该部分每次都会重建。
有没有更好的方法来做到这一点,以便在不更改的情况下使用层缓存CORE_VERSION
?
也许我应该aws
在图像中安装工具链,以便可以在前面的步骤中生成动态存储库 URL(每次使用相同的命令,这样就不需要 ARG 并且希望缓存该层)?这样做的一个缺点是必须将 AWS 凭证放入映像中。docker secrets
如果这是唯一的解决方案,我也许可以避免这种情况。