当两个客户机同时调用我的Web方法时,我试图确定会发生什么。为此,我在Python中生成两个异步请求:
rs = (grequests.post(url, data = json), grequests.post(url, data = json))
grequests.map(rs)
请求在我的WebApi中调用一个非异步方法,它正在改变我的资源,这是一个静态类实例。根据我所理解的,API请求不应该同时运行,这就是我想要的,因为我不希望这两个请求相互干扰。但是,如果我在API方法中设置了一个断点,那么这两个请求似乎会同时运行(并行)。这会导致一些不必要的结果,因为这两个请求正在并行地更改相同的资源。
有没有办法确保Web非并发地处理请求?
发布于 2016-06-21 14:40:46
对Web API方法的请求由IIS应用程序池(线程池)处理,该池为它接收到的每个同步请求初始化一个线程。无法告诉IIS非并发地运行这些线程。
我相信您对什么是“非异步”Web方法有误解。当Web方法是异步的,这意味着当它处于等待状态时,它将共享它的应用程序池线程。这具有其他请求不需要初始化新线程(这有点昂贵)的优点。它还有助于最小化并发线程的数量,从而减少应用程序池必须排队的线程数。
对于非异步方法,IIS应用程序池将为每个请求初始化一个新线程,即使有非活动线程可用。而且,它不会与任何其他请求共享该线程。
所以对你问题的简短回答是否定的。无法确保非并发地处理Web请求。的评论是正确的。在请求期间,您必须锁定共享资源。
https://stackoverflow.com/questions/37946804
复制相似问题