【发布时间】:2022-01-17 02:14:03
【问题描述】:
我有一个如下所示的异步代码:
-
有一个第三方函数对字符串执行一些操作并返回一个修改后的字符串,就这个问题而言,它类似于
non_async_func。 -
我有一个
async def async_func_single函数,它环绕着执行单个操作的non_async_func。 -
然后是另一个
async def async_func_batch函数,它嵌套包裹在async_func_single周围,为一批数据执行该函数。
代码类型的作品,但我想知道更多关于为什么/如何,我的问题是
-
是否有必要创建
async_func_single并让async_func_batch环绕它? -
我可以直接在
async_func_batch中输入一批数据来调用non_async_func吗? -
我有一个 per_chunk 函数可以批量输入数据,是否有任何异步操作/函数可以避免使用预批处理我要发送到
async_func_batch的数据?
import nest_asyncio
nest_asyncio.apply()
import asyncio
from itertools import zip_longest
from loremipsum import get_sentences
def per_chunk(iterable, n=1, fillvalue=None):
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
def non_async_func(text):
return text[::-1]
async def async_func_single(text):
# Perform some string operation.
return non_async_func(text)
async def async_func_batch(batch):
tasks = [async_func_single(text) for text in batch]
return await asyncio.gather(*tasks)
# Create some random inputs
thousand_texts = get_sentences(1000)
# Loop through 20 sentence at a time.
for batch in per_chunk(thousand_texts, n=20):
loop = asyncio.get_event_loop()
results = loop.run_until_complete(async_func_batch(batch))
for i, o in zip(thousand_texts, results):
print(i, o)
【问题讨论】:
标签: python string parallel-processing python-asyncio coroutine