如何确保只有单个进程在线程中运行
问题描述:
我有一个类方法coroutine类,并从一个用户同时获得多个请求,假设用户在t = 0进行函数调用,并且函数需要10毫秒的过程,用户在t = 3毫秒时进行另一次异步调用,然后在t = 10毫秒时响应请求1,并且在t = 20ms时响应请求2,所以请求2的转换时间为17毫秒,但是我想要下面的场景,如何确保只有单个进程在线程中运行
如果请求1来自t = 0ms的一个用户,并且在请求2进入t = 3ms之前运行3ms,那么调用1必须被销毁并呼叫响应2必须启动,并且对于请求2的响应必须在t = 13ms时返回,转向时间为10ms。
就像确保每个用户进行单个进程一样。 所以,如果有一个函数
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从语句和事件循环库和产量。
请提供一些想法如何实现上述想法。
答
在asyncio中,您将使用任务来处理此问题。您跟踪当前正在运行的功能,并取消它,当它再次被调用
_running = None
async def wrapped_myfunction():
global _running
if _running is not None:
_running.cancel()
_running = asyncio.create_task(myfunction())
return await _running
只是可以肯定,等待用户响应启动一个线程,那么你要销毁线程,如果用户调用同样的事情再次启动它一遍? –
是的,我想摧毁那个线程,如果用户再次调用相同的东西来清空新的调用CPU –
你知道你的代码不会创建一个新的线程吗? –