我有一个类型为coroutine的类方法,并且从一个用户同时获取多个请求,假设用户在t = 0时进行函数调用,并且函数需要10 ms进行处理,用户再生成另一个在t = 3 ms时进行异步调用,然后在t = 10 ms时重新进行reuest 1,在t = 20 ms时对请求2的响应进入,因此请求2的周转时间为17 ms,但是我希望以下方案,< / p>
如果请求1来自一个用户,时间为t = 0 ms,并且在请求2进入t = 3ms之前运行3 ms,则必须销毁呼叫1并且必须启动对响应2的呼叫,并且对request2的响应必须在t = 13ms时返回,周转时间为10 ms。
确保为每个用户运行单个进程。 所以,如果有一个功能
def Myfunction(a,b):
return a+b
#user calls
#at t = 0
myfunction(10,5) #takes 10 ms
#at t=3
myfunction(100,200)#takes 10 ms
so i want that myfunction must have only single/latest call instance running for each user i.e in above case only myfunction(100,200) my be occupying the the CPU after t=3 .
我正在使用python asyncio库并从语句和事件循环中产生。
请提供一些如何实现上述想法的想法。
答案 0 :(得分:0)
在asyncio中,您将使用任务来处理此问题。您可以跟踪当前正在运行的功能,并在再次调用时取消它
_running = None
async def wrapped_myfunction():
global _running
if _running is not None:
_running.cancel()
_running = asyncio.create_task(myfunction())
return await _running