假设一个函数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}
and {"15": false, "16": false}
我想避免打电话detect_primes
with [13, 14, 15]
and [15, 16]
。理想情况下,两个请求都应该等待调用[13, 14, 15, 16]
(或两次调用[13, 14, 15]
and [16]
),并返回相应的结果。
Web框架的选择对我来说并不重要,你可以假设它是flask或fastapi。
编辑:不确定问题如何重复或如何回答Flask 中的全局变量是线程安全的吗?如何在请求之间共享数据? https://stackoverflow.com/questions/32815451/are-global-variables-thread-safe-in-flask-how-do-i-share-data-between-requests如上所述,无法使用缓存(无论是内存中的 python 缓存还是外部缓存或数据库)。我很高兴被答案证明是错误的。