擅长:python、mysql、java
<p>使用<a href="https://github.com/vxgmichel/aiostream" rel="nofollow noreferrer">aiostream library</a>可以很容易地实现这一点。下面是一个工作示例:</p>
<pre><code>import asyncio
from random import random
from aiostream import stream, pipe
async def some_async_task(i):
await asyncio.sleep(random())
return i if random() < 0.2 else None
async def process(task_args, n):
return await (
stream.iterate(task_args)
| pipe.map(some_async_task, task_limit=n)
| pipe.filter(bool)
| pipe.take(n)
| pipe.list()
)
async def main():
print(await process(task_args=range(100), n=10))
if __name__ == "__main__":
asyncio.run(main())
</code></pre>
<p>程序将打印成功的前10个任务的列表:</p>
<pre><code>[1, 8, 16, 18, 19, 37, 42, 43, 45, 47]
</code></pre>
<p>还请注意,可以使用<code>task_limit</code>参数调整可以同时运行的<code>some_async_task</code>的数量。你知道吗</p>
<p>免责声明:我是项目维护者。</sub></p>