Suppose a function detect_primes
is expensive to call, and I would like to avoid repeated calls to it with duplicate parameters. What should I do?
Using caching does not help because the function could be called concurrently in different requests. When both of the requests see the cache as empty of a value, both will proceed to execute the expensive function.
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)
for example, if a user requests with 13,14,15, another user requests with 15,16.
The answers are {"13": true, "14": false, "15": false}
and {"15": false, "16": false}
I would like to avoid calling detect_primes
with [13, 14, 15]
and [15, 16]
. Ideally both requests should wait for a call with [13, 14, 15, 16]
(or two calls [13, 14, 15]
and [16]
), and return the respective results.
The choice of web framework is not important to me, you can assume it is flask or fastapi.
EDIT: not sure how the question is a duplicate of or is answered in Are global variables thread-safe in Flask? How do I share data between requests? As explained above, a cache can't be used (be it an in-memory python cache or an external cache or db). I am happy to be proven wrong by an answer.