gpt4 book ai didi

python - 同步代码的异步性能

转载 作者:行者123 更新时间:2023-12-01 08:18:45 28 4
gpt4 key购买 nike

我创建以下测试来检查在异步函数中运行同步代码的性能。

return_random函数中可以是写入日志、转储或加载json、验证输入输出日期、调用其他函数等。

count_sync 和 count_async 变量用于跳过打开和关闭事件循环的开销。只需计算函数内的时间。

这部分代码只是调用同步函数count次。

import timeit
from time import time
from random import random

count = 100
run_numbers = 100000

count_sync = 0

def return_random():
return random()

def test():
global count_sync
start = time()
for _ in range(count):
return_random()
count_sync += time() - start
return

total_sunc = timeit.timeit('test()', globals=globals(),
number=run_numbers))

相同的代码,但现在 return_random 是异步函数:

import asyncio
import uvloop

asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

count_async = 0

async def return_random_async():
return random()

async def test_async():
global count_async
start = time()
for _ in range(count):
await return_random_async()
count_async += time() - start
return

total_sunc = timeit.timeit('asyncio.run(test_async())', globals=globals(), number=run_numbers)

使用不同数量的调用函数和运行时间计算代码后,得到以下结果:

RUNNING run_numbers: 1000. CALL FUNCTIONS count: 1000
total sync: 0.12023316
total Async: 0.48369559500000003
inside def sync 0.11995530128479004
inside def Async:0.24073457717895508

RUNNING run_numbers: 100000. CALL FUNCTIONS count: 100
total sync: 1.422697458
total Async: 25.452165134999998 (!!!)
inside def sync: 1.3965537548065186
inside def Async: 2.8397130966186523

使用同步函数的所有时间运行速度都快 2 倍以上。

这是否意味着不使用异步函数可以更好地运行同步代码?并且最好不要使用大量异步函数?

最佳答案

只有在真正需要时才需要使用异步函数。示例:异步 http 库(如 aiohttp)、异步驱动程序(如 MongoDB 的 motor_asyncio)等。在其他情况下,最好运行不带异步函数的同步代码,因为它们会产生开销您不需要拥有它。

关于python - 同步代码的异步性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813458/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com