【发布时间】:2022-03-24 00:31:33
【问题描述】:
假设一个函数detect_primes 的调用成本很高,我想避免使用重复参数重复调用它。我该怎么办?
使用缓存没有帮助,因为该函数可以在不同的请求中同时调用。当两个请求都将缓存视为空值时,两个请求都将继续执行代价高昂的函数。
def detect_primes(nums: List[int]) -> Dict[int, bool]:
""" detect whether a list of numbers are prime """
@app.route('/detect', methods=['GET'])
def search():
args = request.args
nums = list(map(int, args.get('nums', '').split(',')))
return detect_primes(nums)
例如,如果一个用户用 13,14,15 请求,另一个用户用 15,16 请求。
答案是{"13": true, "14": false, "15": false} 和{"15": false, "16": false}
我想避免使用[13, 14, 15] 和[15, 16] 调用detect_primes。理想情况下,两个请求都应该等待与[13, 14, 15, 16] 的调用(或两个调用[13, 14, 15] 和[16]),并返回各自的结果。
web框架的选择对我来说并不重要,你可以假设它是flask或fastapi。
编辑:不确定问题是如何与Are global variables thread-safe in Flask? How do I share data between requests? 重复或在Are global variables thread-safe in Flask? How do I share data between requests? 中回答的。如上所述,不能使用缓存(无论是内存中的 python 缓存还是外部缓存或数据库)。我很高兴被答案证明是错误的。
【问题讨论】:
标签: python flask queue python-asyncio fastapi