2017-01-09 11 views
2

私はAjaxでPython関数を呼び出そうとしています。私はその機能の実行を停止したい。私はページをリフレッシュしようとしましたが、それは止まらない。私はDjangoサーバーを停止すると停止します。Django関数の実行を停止する方法

ここにいくつかのコード:このコールの呼び出しHTTPリクエスト

class ScrapData(): 

    @classmethod 
    def search_status(self, urls_list): 
     for url in urls_list: 
      r = requests.get(url) 
      text = r.text 
      #... 

     return 1 

私は機能を停止したいアヤックス

class SearchData(View): 

    def get(self, request, *args, **kwargs): 
     urls_list = []; 
     response = ScrapData().search_status(urls_list) 

     return HttpResponse(response) 

ことで、このビューを呼び出します。これどうやってするの?ありがとう

+0

self on classmethod? –

+0

あなたの機能を停止させるイベントはありますか?おそらく、リクエストのタイムアウトを設定できますか? – Fomalhaut

+0

申し訳ありませんが間違い..自己はclsになります –

答えて

1

このdjangoアプリはどのように提供されますか?プロセスとスレッドはいくつありますか?どのスレッドが特定の要求を実行しているかをどのように知っていますか?これに対処するいくつかのPythonの方法がありますが、「特定の要求を停止する」ほど単純ではありません。

私の意見では、管理、スケーラビリティ、自己完結という点で長いポーリングのタスクを処理する最良の方法は、セロリのようなツールを使うことです。専用のSO question on how to revoke a Celery taskもあります。

Django Channelsは、この問題に対する新鮮なアプローチですが、Celeryではなく、それを使用できるようになるには少し前の開発が必要です。

+0

さんのおかげで、セッションやデータベースなどを使って処理する方法はありますか? –

+0

ようこそ。確かに、キャンセルajaxが送信されたときに呼び出されるビュー内のものを処理します。 – Wtower

0

私は同じ問題を抱えていました。間違って遅いリクエストをしました。そして、私はApacheサーバーを再起動して停止しました。サーバーを再起動しても問題が解決しない可能性があります。

関連する問題