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. Continue reading...