Django如何停止执行某个函数

时间:2017-01-09 06:34:44

标签: python ajax django

我试图通过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)

我想停止这个功能。我怎样才能做到这一点?感谢

3 个答案:

答案 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)