【发布时间】:2022-01-04 17:19:59
【问题描述】:
假设有一些 API 已经在生产环境中运行,并且您创建了另一个 API,您希望使用到达生产 API 的传入请求进行 A/B 测试。现在我想知道,是否有可能做这样的事情,(我知道人们通过为 A/B 测试等保留两个不同的 API 版本来进行流量拆分)
收到生产 API 的传入请求后,您立即向新 API 发出异步请求,然后继续处理生产 API 的其余代码,然后在返回最终响应之前返回给调用者,您检查是否为您之前创建的异步任务计算了结果。如果它可用,则返回它而不是当前 API。
我想知道,做这样的事情最好的方法是什么?我们是否尝试为此或其他东西编写装饰器?如果我们在这里使用异步,我有点担心会发生很多边缘情况。任何人有任何关于使代码或整个方法更好的建议吗?
感谢您的宝贵时间!
上述方法的一些伪代码,
import asyncio
def call_old_api():
pass
async def call_new_api():
pass
async def main():
task = asyncio.Task(call_new_api())
oldResp = call_old_api()
resp = await task
if task.done():
return resp
else:
task.cancel() # maybe
return oldResp
asyncio.run(main())
【问题讨论】:
标签: python-3.x api asynchronous python-asyncio ab-testing