
openYuanrong 官网官网gitcode仓库仓库避免过度并发相比普通函数调用并发或者分布式调用需要更多的工作负载。并发调用过于细粒度的作业可能会比普通函数调用更低效。为了避免上述问题需谨慎设计函数并规划并发作业。如果需要并发调用一个细粒度的作业可以使用批量处理让每一次调用处理更多有效工作。使用示例# demo.pyimporttimeimportnumpyasnpimportyr yr.init()defprocess_ordinary(batch):time.sleep(0.00001)# 使用 numpy 向量化计算极快returnbatch*2yr.invokedefprocess_batch(batch):# 使用 numpy 向量化计算极快returnprocess_ordinary(batch)# 将数据切分为较大的块Chunksdatasnp.arange(1000)start_timetime.time()results[process_ordinary(data)fordataindatas]end_timetime.time()print(fOrdinary function call takes{end_time-start_time}seconds)# Ordinary function call takes 0.07148480415344238 secondsstart_timetime.time()resultsyr.get([process_batch.invoke(data)fordataindatas])end_timetime.time()print(fParallelizing tasks takes{end_time-start_time}seconds)# Parallelizing tasks takes 6.002047777175903 secondschunksnp.array_split(datas,10)# 拆分成 10 个大任务start_timetime.time()resultsyr.get([process_batch.invoke(chunk)forchunkinchunks])# 只有 10 次调度开销计算效率极高end_timetime.time()print(fParallelizing tasks with batching takes{end_time-start_time}seconds)# Parallelizing tasks with batching takes 0.016678571701049805 secondsyr.finalize()上述例子展示了并发调度的效率不如普通调用的效率。但是通过批量处理使并发中的每一次调用处理了更多的作业从而实现了预期的处理效率。