擅长:python、mysql、java
<p>在这里收到以评论形式提供的帮助后,我能够使用<code>concurrent.futures</code>将解决方案汇总在一起:</p>
<pre class="lang-py prettyprint-override"><code>import concurrent.futures
import time
def slow_1(s):
time.sleep(5)
print(f"1: {s}")
return "1: ok"
def slow_2(s):
time.sleep(1)
print(f"2: {s}")
return "2: ok"
def slow_3(s):
time.sleep(1)
print(f"3: {s}")
return "3: ok"
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
futures = (
executor.submit(slow_1, "x"),
executor.submit(slow_2, "y"),
executor.submit(slow_3, "z"),
)
concurrent.futures.wait(futures)
for future in futures:
try:
print(future.result())
except: # This should obviously be more explicit
pass
</code></pre>
<p>哪些产出:</p>
<pre><code>2: y
3: z
1: x
1: ok
2: ok
3: ok
</code></pre>
<p>我应该注意到,官方文档不清楚您是否可以在将来通过调用<code>.result()</code>从函数中获取返回值,或者<em>您需要循环<code>futures</code></em>值以获得所述结果<code>.wait()</code>按返回</em>的顺序返回{<cd5>}和{<cd6>}值的元组<em>,因此循环<code>done</code>的值对我来说破坏了很多东西。如果你和我一样,只想同时做3件慢的事情,并从这三件事情中得到结果,那么这段代码可能适合你</p>