我试图通过Ajax调用python函数。我想停止执行该功能。我试图刷新页面,但它并没有停止。当我停止Django服务器时,它就会停止。
这里有一些代码:这个Call call HTTP request
class ScrapData():
@classmethod
def search_status(self, urls_list):
for url in urls_list:
r = requests.get(url)
text = r.text
#...
return 1
通过Ajax调用此视图
class SearchData(View):
def get(self, request, *args, **kwargs):
urls_list = [];
response = ScrapData().search_status(urls_list)
return HttpResponse(response)
我想停止这个功能。我怎样才能做到这一点?感谢
答案 0 :(得分:1)
这款django应用程序如何服务?有多少进程和线程?你怎么知道哪个线程运行特定请求?有几种Python方法可以解决这个问题,但它不像"停止特定请求那么简单"。
在我看来,在管理,可扩展性和自我健全方面处理长轮询任务的最佳方法是使用像Celery这样的工具。还有专门的SO question on how to revoke a Celery task。
Django Channels是另一个解决问题的新方法,但在使用它之前需要更多的开发才能使用而不是Celery。
答案 1 :(得分:0)
我遇到了同样的问题,我称之为错误且缓慢的请求。我通过重新启动我的Apache服务器来阻止它。当重启服务器时,它可能是一个解决方案。
答案 2 :(得分:0)
试试嵌套函数,它会让你调用你想要的任何函数,或者结束进程
代码:
class ScrapData():
@classmethod
def func():
def search_status(self, urls_list):
for url in urls_list:
r = requests.get(url)
text = r.text
#...
return 1
def get(self, request, *args, **kwargs):
urls_list = [];
response = ScrapData().search_status(urls_list)
return HttpResponse(response)
def empty():
pass
#call the function you want to be excute further on
#if you want nothing to happen then call empty function(pass keyword)