擅长:python、mysql、java
<p>我想<a href="https://docs.python.org/3/library/contextlib.html#contextlib.ExitStack" rel="nofollow noreferrer">^{<cd1>}</a>正是你要找的。这是一种将不确定数量的上下文管理器安全地组合到一个上下文管理器中的方法(这样在输入一个上下文管理器时出现异常不会导致它跳过已经成功输入的上下文管理器)。你知道吗</p>
<p>文件中的例子很有启发性:</p>
<pre><code>with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filenames]
# All opened files will automatically be closed at the end of
# the with statement, even if attempts to open files later
# in the list raise an exception
</code></pre>
<p>这可以很容易地适应您的“希望”代码:</p>
<pre><code>import contextlib
with contextlib.ExitStack() as stack:
tasks = [stack.enter_context(SomeAsyncTask(params))
for params in list_of_async_task_params]
for task in tasks:
task.thread.start()
for task in tasks:
task.thread.join()
</code></pre>