3

フラスコ python フレームワークを使用して Web アプリケーションを作成しています。その機能の一部として、コンパイルされたプログラム (C++ コードですが、私はバイナリにしかアクセスできません) を実行する必要があります。このプログラムは、ユーザーがアップロードしたファイルを取得し、それらを処理して、出力ファイルを生成します。
このようなアプリケーションを設計する最善の方法は何ですか? このコードに対するライブラリや API はありません。

このモジュールを使用して、subprocess必要なときにいつでもこのバイナリを実行できますが、サーバーが大量のリクエストを受け取るとどうなるか心配です (プロセスは CPU を集中的に使用します)。処理できる同時リクエストの数に制限を設定できると思います。より良い解決策はありますか?

(好奇心から、CPP ソース コードを持っているとしましょう。このコードを使用して Web アプリケーションを構築するにはどうすればよいでしょうか?)

4

3 に答える 3

2

私の当面の提案は次のとおりです。

  1. まず、システムコールを介してバイナリを使用すると、ブラックボックスであり、あなたが言及したように、問題に非常に簡単に遭遇する可能性がありますが、おそらくある程度は機能します。システム コールの戻り値を処理する可能性は常にありますが、これも理想的ではないため、単純な API でラップしてもおそらく有用性は限られます。私の直接の提案は、このオプションを使用せず、次のアイデアのいずれかを使用してニーズに合わせてコンパイルすることです。

  2. ソースコードにアクセスできる場合。ネイティブ C++ コードとのインターフェースを可能にするPython 拡張モジュールを作成します。与えられたリンクは私よりもよく説明できますが、あなたが言及したように、バイナリから起動する必要がない方法でコードを統合するのはかなり簡単な方法かもしれません.

  3. さらに、C++ コード用のネイティブ Web アプリケーションを構築するには、Wt C++ Web ツールキットを使用することをお勧めします。これは、ネイティブ C++ を使用してインタラクティブな Web ページを構築し、バイナリを実行して Web サーバーを実行し、本格的な Web サイトを作成できる Qt スタイルのフレームワークです。前述のように、リンクを確認すると、私が話していることをよりよく理解できます。おそらく他のフレームワークがありますが、私はこれを使用しましたが、非常に簡単であることがわかりました。

于 2012-11-14T12:33:42.153 に答える
0

タスクの実行にはセロリを使用します。呼び出しを非同期にする機能があり、ポーリングまたは Web ソケットを介してセロリと通信することもできます。

処理するタスクが多数ある場合は、Celery をお勧めします。

于 2012-11-14T12:36:00.343 に答える
0

cpp ソース コードがある場合は、コンパイル済みの cpp オブジェクト モジュール (コンパイル後に生成されるファイル) を介してswig、または呼び出すために python をリンクします。boost.o

swig チュートリアルへの参照 - http://www.swig.org/tutorial.html

于 2012-11-14T12:31:26.573 に答える