ホームページ  >  記事  >  バックエンド開発  >  ubuntu での Python+tornado+supervisor+nginx のデプロイメント

ubuntu での Python+tornado+supervisor+nginx のデプロイメント

PHP中文网
PHP中文网オリジナル
2017-07-14 18:13:091218ブラウズ

以前に病院で収集したデータは写真で撮影した処方箋の写真であったため、使用する必要があるのはテキスト形式の処方箋です。そこで、私は過去 2 週間で、サーバーの写真をユーザーに表示し (当時は何人かの人材を雇っていました)、ユーザーが写真に基づいてテキスト情報を入力できるようにする小さなプログラムを書きました。

以前はJavaでWebページを書いていたのですが、最近機械学習を学ぶためにPythonを使おうと思い、また、新しいものを使いたかったので、プログラムが比較的小さかったので、Pythonを使用して作成することを検討しました。ストレージに mongodb を使用します (実際には必要ありませんが)。

基本的なアーキテクチャは次のとおりです: (バックエンド言語) Python + (Web フレームワークと Web サーバー) tornado + (データベース) mongodb + (プロセス管理) スーパーバイザー + (リバース プロキシ) nginx

(1) Python: Liao Xuefeng の Python チュートリアルを見ています

基本的な文をいくつか学び、理解できない場合はもう一度確認してください。

(2) トルネード: このチュートリアルを見てから学習を始めました

tornado は非常に高速に使用でき、Spring のフォワーダーのようにリクエストを直接マッピングしたり、Tomcat のように特定のポートで http リクエストを直接監視したりできます。get メソッドと post メソッドを記述するだけで済みます。 。

残りはJava Webとほぼ同じです。 springMVC や Hibernate のフレームワークを使わずに、自分で Python パッケージにコントローラー、サービス、Dao を階層化することができます。

(3) mongodb: 非リレーショナル データベース。テーブル (mongodb ではコレクションと呼ばれます) 内のデータの各行 (mongodb ではドキュメントと呼ばれます) が同じフィールド名を持つ必要はありません。多かれ少なかれ、それは同時に変化する可能性があります。もう 1 つのポイントは、トランザクションがサポートされておらず、Python で複数の読み取りおよび書き込みステートメントを実行するときにロールバックする方法がないため、プログラムの同時実行によって引き起こされる問題を防ぐ方法を見つける必要があることです。

たとえば、ステータスが 0 のドキュメントをコレクションから見つけて 1 に更新する必要があります。これは、ユーザーが変更を行った後、ステータスを 2 に設定して元に戻すことを意味します。ここで、0 は閲覧しないことを意味し、1 は閲覧中を意味し、2 は変更されたことを意味します。この時点で、多くのユーザーがステータス 0 のデータを同時に取得した可能性があります。これは私たちの意図に反して、多くの人が同じデータを変更することを可能にします。 update_one を直接使用してドキュメントのステータスを 0 から 1 に変更し、ドキュメントを識別するための一意のフィールドを追加し、この一意のフィールドを使用してドキュメントを検索することもできます。現時点では、update_one が原因で他のユーザーはドキュメントを取得できません。時間が来るとロックされ、他の人はこのデータを取得できなくなります。

(4) スーパーバイザー: スーパーバイザーは Python で開発されたプロセス管理プログラムで、通常のコマンドをバックグラウンド デーモン プロセスに変換し、プロセスのステータスを監視できます。

インストール後、/etc/supervisor/conf.d ディレクトリに設定ファイル printprescription.conf を追加できます。設定例は次のとおりです。

リーリー
構成が完了したら、スーパーバイザー サービスを開いたり、閉じたり、再起動したりできます。 supervisorctl status を使用してプロセスのステータスを確認でき、関連するログ ファイルでエラー情報を確認することもできます

リーリー

(5) nginx: nginx は、ポート 80 を監視し、対応するリクエストを他のホストや他のポートに転送できます。ここで表示される画像のパスは、tornado の静的パスではありません (静的パスは、Tornado に使用されます)。 js や css などのフロントエンド静的リソースを保存しますが、サーバー上の別の場所に保存されるため、nginx 転送を通じてイメージを取得できます。一方、他のポート (Tornado がリッスンする 8001 ポートなど) は通常ユーザーに公開されないため、転送には nginx が使用されます。さらに、location /static/ ディレクティブは、tornado にリクエストをプロキシする代わりに、静的ディレクトリ ファイルを直接提供するように nginx に指示します。nginx は、tornado よりも効率的に静的ファイルを提供できます。

nginx をインストールした後、関連する設定ファイルを確認し、次の文を見つけます: include /etc/nginx/sites-enabled/*。設定用にこのディレクトリに新しい設定ファイルを作成できます

リーリー
設定例は以下のとおりです。ここで最後のスラッシュを入力しないと、実際には「host」にアクセスしたときに上記の printprescription が追加されます。 /printprescription" とすると、Access "Host:8001/printprescription" に相当します。 Host:8001/ のリクエストを tornado にマッピングしたので、この時点では 404 が表示されます。

リーリー

 

(6)opencv:一个计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。由于之前采集数据的时候在处方图片数据中混杂了人脸图片,所以采用oepncv里的算法检测人脸,如果是人脸则删除该记录。然而还是会残留一些人脸图片,需要人工清洗,这个数据好像之前有师兄清洗过,到时候拿过来重构一下数据库。

ps:安装opencv的时候imshow报错,虽然imshow用不到,但是强迫症使然,搞了我一天,来来回回装了十多次,最后还是没搞定,真是心力交瘁,特想吐嘈:垃圾opencv!毁我青春!颓我精神!耗我时间!磨我意志!浪费人生!!!

好吧我就随便说说,回头还要靠它干活。

cv2.error: /io/opencv/modules/highgui/src/window.<span style="color: #0000ff">cpp</span>:<span style="color: #800080">583</span>: error: (-<span style="color: #800080">2</span>) The <span style="color: #0000ff">function</span> is not implemented. Rebuild the library with Windows, GTK+ <span style="color: #800080">2</span>.x or Carbon support. If you are on Ubuntu or Debian, <span style="color: #0000ff">install</span> libgtk2.<span style="color: #800080">0</span>-dev and <span style="color: #0000ff">pkg-config</span>, <span style="color: #0000ff">then</span> re-run cmake or configure script <span style="color: #0000ff">in</span> <span style="color: #0000ff">function</span> cvShowImage

 

以上がubuntu での Python+tornado+supervisor+nginx のデプロイメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。