2017-08-07 76 views
-1

我有一个类方法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从语句和事件循环库和产量。

请提供一些想法如何实现上述想法。

+0

只是可以肯定,等待用户响应启动一个线程,那么你要销毁线程,如果用户调用同样的事情再次启动它一遍? –

+0

是的,我想摧毁那个线程,如果用户再次调用相同的东西来清空新的调用CPU –

+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 
相关问题