Heim  >  Artikel  >  Backend-Entwicklung  >  Python+Tornado+Supervisor+Nginx-Bereitstellung unter Ubuntu

Python+Tornado+Supervisor+Nginx-Bereitstellung unter Ubuntu

PHP中文网
PHP中文网Original
2017-07-14 18:13:091218Durchsuche

Da es sich bei den zuvor im Krankenhaus erfassten Daten um durch Fotografieren gewonnene Rezeptbilder handelte, muss die Textform des Rezepts verwendet werden. Deshalb habe ich in den letzten zwei Wochen ein kleines Programm geschrieben, um Benutzern Bilder des Servers anzuzeigen (damals habe ich einige Leute eingestellt), sodass Benutzer Textinformationen basierend auf den Bildern eingeben können.

Ich habe früher Java zum Schreiben von Webseiten verwendet. Ich dachte, ich würde Python verwenden, um maschinelles Lernen zu lernen. Außerdem habe ich Python zum Schreiben verwendet. Außerdem wollte ich etwas Neues verwenden und das Programm war relativ klein. Ich habe überlegt, Mongodb zur Speicherung zu verwenden (obwohl das wirklich nicht notwendig ist).

Die Grundarchitektur ist wie folgt: (Backend-Sprache) Python + (Web-Framework und Webserver) Tornado + (Datenbank) Mongodb + (Prozessmanagement) Supervisor + (Reverse-Proxy) Nginx

(1) Python: Ich schaue mir Liao Xuefengs Python-Tutorial an

Ich habe einige Grundsätze gelernt und sie dann überprüft, wenn ich sie beim Sprechen nicht verstanden habe.

(2) Tornado: Ich begann zu lernen, nachdem ich mir dieses Tutorial angesehen hatte

Tornado ist sehr schnell zu verwenden, wie ein Forwarder, und kann auch http-Anfragen direkt an einem bestimmten Port überwachen, wie Tomcat. Wir müssen nur das schreiben Get- und Post-Methoden sind in Ordnung.

Andere sind fast die gleichen wie im Java Web. Ohne das Framework von SpringMVC und Hibernate können Sie Controller, Service und Dao selbst im Python-Paket schichten.

(3) mongodb: Da es sich um eine nicht relationale Datenbank handelt, ist es nicht erforderlich, dass derselbe Feldname für jede Datenzeile (in mongodb als Dokument bezeichnet) in einer Tabelle (als a bezeichnet) vereinheitlicht wird Sammlung in Mongodb). Mehr oder weniger ungleichmäßig. Ein weiterer Punkt ist, dass Transaktionen nicht unterstützt werden und es keine Möglichkeit gibt, beim Ausführen mehrerer Lese- und Schreibanweisungen in Python ein Rollback durchzuführen. Sie müssen daher einen Weg finden, Probleme zu verhindern, die durch Parallelität im Programm verursacht werden.

Zum Beispiel muss ich ein Dokument mit dem Status 0 aus der Sammlung finden und es auf 1 aktualisieren, was bedeutet, dass der Benutzer es anzeigt. Nachdem der Benutzer Änderungen vorgenommen hat, setze ich den Status auf 2 und setze es dann Hier bedeutet 0 nicht durchsucht, 1 bedeutet, dass es durchsucht wird und 2 bedeutet, dass es geändert wurde. Zu diesem Zeitpunkt haben möglicherweise viele Benutzer gleichzeitig die Daten mit dem Status 0 erhalten. Dies widerspricht unseren Wünschen und ermöglicht es vielen Personen, dieselben Daten zu ändern. Sie können update_one direkt in Betracht ziehen, um den Status eines Dokuments von 0 auf 1 zu ändern, und dann ein eindeutiges Feld hinzufügen, um das Dokument zu identifizieren, und dieses eindeutige Feld verwenden, um das Dokument zu finden. Zu diesem Zeitpunkt können andere Benutzer das Dokument nicht abrufen, da update_one Es wird gesperrt, wenn es soweit ist, und andere können diese Daten nicht erhalten.

(4) Supervisor: Supervisor ist ein in Python entwickeltes Prozessverwaltungsprogramm, das gewöhnliche Befehle in Hintergrunddämonen umwandeln und den Prozessstatus überwachen kann.

Nach der Installation können Sie die Konfigurationsdatei printprescription.conf im Verzeichnis /etc/supervisor/conf.d hinzufügen. Das Konfigurationsbeispiel lautet wie folgt

[program:printprescription] #设置守护进程名
command = python /home/liaohuqiang/Code/printprescription/main2.py #设置执行命令
autorstart=true #设置随supervisor的启动而启动
stdout_logfile = /home/liaohuqiang/Code/printprescription/printprescription.log #设置日志路径

Nachdem die Konfiguration abgeschlossen ist, können Sie den Supervisor-Dienst öffnen, schließen und neu starten. Mit „supervisorctl status“ können Sie den Prozessstatus sowie die Fehlerinformationen in den entsprechenden Protokolldateien überprüfen

sudo /etc/init.d/supervisor start
sudo /etc/init.d/supervisor stop
sudo /etc/init.d/supervisor restart<br><br>sudo supervisorctl status printprescripton<br>vim cat /var/log/supervisor/xxx.log

 

(5) nginx: nginx wird als Reverse-Proxy verwendet. Es kann Port 80 überwachen und entsprechende Anfragen an andere Hosts und andere Ports weiterleiten in statisch (statisch wird zum Speichern statischer Front-End-Ressourcen wie js und css verwendet), aber an einem anderen Ort auf dem Server, sodass das Bild über die Nginx-Weiterleitung abgerufen werden kann. Andererseits sind andere Ports (z. B. der 8001-Port, den Tornado abhört) im Allgemeinen nicht für Benutzer verfügbar, sodass Nginx für die Weiterleitung verwendet wird. Darüber hinaus weist die Anweisung „location /static/“ Nginx an, statische Verzeichnisdateien direkt bereitzustellen, anstatt Anfragen an Tornado weiterzuleiten, und kann statische Dateien effizienter bereitstellen als Tornado.

Überprüfen Sie nach der Installation von Nginx die relevanten Konfigurationsdateien und finden Sie diesen Satz: include /etc/nginx/sites-enabled/*. In diesem Verzeichnis können Sie eine neue Konfigurationsdatei für die Konfiguration

erstellen
cat /etc/nginx/nginx.conf<br>sudo touch /etc/nginx/sites-enabled/default2

Das Konfigurationsbeispiel lautet wie folgt. Es ist zu beachten, dass der letzte Schrägstrich hier nicht eingegeben wird, wenn der Benutzer auf „host“ zugreift /printprescription“ Dies entspricht dem Zugriff auf „Host:8001/printprescription“. Da die Anfrage auf Tornado Host:8001/ zugeordnet ist, wird zu diesem Zeitpunkt 404 angezeigt.

<span style="color: #000000">  upstream frontends {
      server </span><span style="color: #800080">222.222</span>.<span style="color: #800080">222.222</span>:<span style="color: #800080">8000</span><span style="color: #000000">;
      server </span><span style="color: #800080">222.222</span>.<span style="color: #800080">222.222</span>:<span style="color: #800080">8001</span><span style="color: #000000">;
  }
  
  server {
      listen </span><span style="color: #800080">80</span><span style="color: #000000">;
  
      location </span>/<span style="color: #000000"> {
         proxy_read_timeout </span><span style="color: #800080">1800</span><span style="color: #000000">;
         proxy_pass_header Server;
         proxy_set_header Host $http_host;
         proxy_redirect off;
         proxy_set_header X</span>-Real-<span style="color: #000000">IP $remote_addr;
         proxy_set_header X</span>-<span style="color: #000000">Scheme $scheme;
         proxy_pass http:</span><span style="color: #008000">//</span><span style="color: #008000">frontends;</span>
<span style="color: #000000">     }
 
    location </span>/doctorAfter/<span style="color: #000000"> {  #配置图片路径
         root </span>/home/<span style="color: #000000">wenserver;
    }
 
    location </span>/static/<span style="color: #000000"> {  #配置前端静态资源路径
         root </span>/home/xxx/Code/printprescription/<span style="color: #000000">view;
    }
 
    location </span>/printprescription/<span style="color: #000000"> {
         proxy_read_timeout </span><span style="color: #800080">1800</span><span style="color: #000000">;
         proxy_pass_header Server;
         proxy_set_header Host $http_host;
         proxy_redirect off;
         proxy_set_header X</span>-Real-<span style="color: #000000">IP $remote_addr;
         proxy_set_header X</span>-<span style="color: #000000">Scheme $scheme;
         proxy_pass http:</span><span style="color: #008000">//</span><span style="color: #008000">127.0.0.1:8001/;</span>
<span style="color: #000000">     }
 
 }</span>

 

(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

 

Das obige ist der detaillierte Inhalt vonPython+Tornado+Supervisor+Nginx-Bereitstellung unter Ubuntu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn