3

テキスト読み上げシステムを Web に接続するためにフラスコ フレームワークを使用しています。基本的に、ウェブサイトはテキストボックスを介して入力を受け取り、オーディオファイルを返します。テキスト ボックスにテキストが入力され、下のボタンが押されると、コールバックが呼び出されます。

def task_text2speech():

    # call to my text to speech system 
    # respond to client

上記の関数ステップ「# call to my text to speech system」には、約 30 ~ 100 秒かかります。この間、クライアント ブラウザは応答しません。task_text2speech で task_text2speech をブロックする代わりにスレッドを開始することでこれを克服し、スレッドが音声合成で完了したらクライアントに応答します。

私にとってスレッド化の実装は問題ではありませんが、上記のシナリオでクライアントに応答するために必要なフラスコ ハンドラーについては知りません。ドキュメントや実装例を歓迎します。

4

1 に答える 1

2

これを実装できる簡単でローテクな方法は、サーバーが要求を処理していることを示す応答をクライアントに返し、それと並行してスレッドを開始して作業を行うことです。各ワーカー スレッドに一意の ID を割り当てます。

「処理中」メッセージを表示する応答ページには、たとえば 5 秒後に起動する自動リダイレクトがあります。リダイレクトは、ワーカー スレッド ID を受け取る新しい Flask ルートになります。このルートに関連付けられたビュー関数は、ワーカー スレッドの状態をチェックし、そのスレッドがまだ機能している場合は、同じ「処理中」ページで応答するため、クライアントはさらに 5 秒後に再度リダイレクトされます。

処理ページからのリダイレクト ハンドラーは、ワーカー スレッドが終了したことを検出すると、ダウンロード用に生成されたオーディオ ファイルを提供する新しいページにリダイレクトできます。

これが役立つことを願っています。

于 2013-06-30T00:54:25.783 に答える