0

現在、Python バックエンドで実行されている関数に基づいて、JavaScript/HTML のフロントエンドにある種の進行状況 (バー) を表示できるようにしたいという問題があります。これを達成するために、バックエンドで進行状況を追跡する「カウンター」変数を定義しました。私が今持っている唯一の問題は、このカウンター変数をフロントエンド側の投稿要求への応答として取得することです。つまり、バックエンドでポスト リクエストによってトリガーされたメソッドがまだ実行されている間、ポスト リクエストで、継続的に更新する必要があるカウンタ変数を含むレスポンス ボディを取得できるようにする必要があります。

現在、私のリクエストは次のようになっています。

function runMethod(){
  $.ajax({
  url: "url:port/runMethod",
  type: 'POST',
  async: true,
  data: 
      JSON.stringify({
          'somedata': someData     
  }),
  success: function (my_data) {
    logger(my_data)
  },
  error: function() {
    alert("error running method");
     }
  })
}

function logger(my_data){
  var logged = my_data['counter'];
  document.getElementById('myprogress').innerHTML = logged;
  console.log(logged);
}

そして、Python API で投稿リクエストを処理する方法は次のとおりです。

class MyServer(BaseHTTPRequestHandler):
    def __init__(self, request: bytes, client_address, server) -> None:
        self.classes = {t.__name__: t for t in all_classes}
        #self.ldp_experiment = None
        super().__init__(request, client_address, server)

    def do_POST(self):
        # Send our response code, header, and data
        self.send_response(200)
        self.send_header("Content-type", "Application/json")
        self.send_header("Access-Control-Allow-Origin", "*")
        self.send_header('Access-Control-Allow-Headers', 'Content-Type, Accept')
        
        body = self.rfile.read(int(self.headers['Content-Length']))
        print(body)
        try:
            body = json.loads(body)
        except ValueError:
            pass

        if self.path.startswith('/runMethod'):
        contentType = 'application/json'
        logging.info('Running Method...')
        func1 = somefunc(body['somedata'])
        my_progress = someclass.progress_variable
        response = json.dumps({'counter':[my_progress]})

        self.end_headers()
        self.wfile.write(response.encode('UTF-8'))

    if __name__ == "__main__":        
        webServer = HTTPServer(("", serverPort), MyServer)
        print("Server started http://%s:%s" % ("", serverPort))

        try:
             webServer.serve_forever()
        except KeyboardInterrupt:
             pass

        webServer.server_close()
        print("Server stopped.")

setInterval() または setTimeout() を使用してリクエストを複数回実行することを提案している投稿をいくつか見ました。これにより、カウンター変数をより頻繁に応答として取得できますが、関数もより頻繁に実行されます。目的全体を打ち負かします。

フロントエンドでこの進行状況変数を取得するために何ができるか考えている人はいますか?

4

0 に答える 0