ubuntu下python+tornado+supervisor+nginx部署
由於先前在醫院收集的資料都是拍照得到的處方圖片,而需要用到的是處方的文字形式。因此這兩個星期寫了個小程式把伺服器的圖片顯示給使用者(到時候請一些人),讓使用者根據圖片錄入文字訊息。
之前都是用java寫web,想到自己最近學機器學習要用python,所以用python來寫一下,此外,因為想用點新東西,也介於程式比較小,所以考慮用mongodb來存儲(雖然確實沒有必要)。
基本架構是這樣:(後台語言)python +(web框架和網頁伺服器)tornado + (資料庫)mongodb +(進程管理)supervisor + (反向代理)nginx
(1)python:我是看廖學峰的python教學
#學了一些基本的語句,然後做的時候不懂再查。
(2)tornado:我是看這個教學開始學的
#tornado用起來特別快,它既可以像spring裡轉發器那樣直接映射請求,又可以像tomcat那樣直接監聽某個端口的http請求,這些東西tornado都幫我們做好了,我們只需要書寫get和post方法就可以了。
其它的就跟java web裡面差不多了。沒有springMVC和hibernate的框架,可以自己在python套件裡面分層controller, service, dao。
(3)mongodb:非關係型資料庫,對於一張表(mongodb裡叫collection集合)的每一行資料(mongodb裡叫document文檔)沒有要求統一相同的欄位名,可多可少,參差不齊。還有一點就是不支援事務,在python中執行多個讀寫語句的時候沒辦法回滾,所以要自己想辦法在程式中防止並發導致的問題。
例如我需要從collection中find一個status為0的document出來並update成1,代表用戶正在查看,用戶進行修改後,然後設定status為2之後再放回去,在這裡0代表未瀏覽,1代表正在瀏覽,2代表已修改。這時候可能有許多用戶同時取到了這個status為0的數據,這就違背了我們的意願,讓很多人對同一個數據進行了修改。可以考慮直接update_one把某個document的status由0改為1,然後增加一個唯一字段來標識這個document,用這個唯一字段來find到document,這個時候別的用戶是無法取到該document的,因為update_one的時候會上鎖,別人拿不到這條資料。
(4)supervisor:supervisor是用python開發的進程管理程序,可以將普通的指令變成後台的守護進程,並且監控進程狀態。
安裝好後可以在/etc/supervisor/conf.d目錄下新增設定檔printprescription.conf,設定範例如下
[program:printprescription] #设置守护进程名 command = python /home/liaohuqiang/Code/printprescription/main2.py #设置执行命令 autorstart=true #设置随supervisor的启动而启动 stdout_logfile = /home/liaohuqiang/Code/printprescription/printprescription.log #设置日志路径
設定完成後,可開啟,關閉和重新啟動supervisor服務。可以用supervisorctl status查看進程狀態,也可以在相關日誌檔查看錯誤訊息
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用於反向代理,可以監控80端口,把相應的請求轉發到別的主機以及別的端口上,這裡我們顯示的圖片的路徑不在tornado的static中(static用來存放js和css等前端靜態資源),而是在伺服器另外的位置,所以可以透過nginx的轉送來取得圖片。另一方面,一般不會暴露其它連接埠(例如tornado監聽的8001連接埠)給用戶,所以用nginx來轉送。此外,location /static/指令告訴nginx直接提供靜態目錄文件,而不再代理請求到tornado,nginx可以比tornado更有效率地提供靜態文件。
安裝好nginx後,查看相關設定文件,發現這句話:include /etc/nginx/sites-enabled/*。可以在這個目錄下新建設定檔進行設定
cat /etc/nginx/nginx.conf<br>sudo touch /etc/nginx/sites-enabled/default2
配置範例如下,要注意的是最下面的http://127.0.0.1:8001/ 這裡最後一個斜杠如果不打,實際上會加上上面的printprescription,用戶訪問”主機/printprescription"就相當於存取"主機:8001/printprescription「了,由於自己在tornado上映射的是主機:8001/的請求,所以這個時候會出現404。
<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
以上是ubuntu下python+tornado+supervisor+nginx部署的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如今,Ubuntu不允許其用戶打開終端機是一個非常普遍的問題。如果您收到類似的問題並且不知道下一步該怎麼做,請了解有關如何在Linux裝置上解決此「Ubuntu無法開啟終端」問題的五個修復程式。事不宜遲,讓我們深入探討導致它的原因及其可用的解決方案。為什麼Ubuntu打不開它上面的終端機?這主要發生在您安裝一些有缺陷的軟體或修改終端配置時。除此之外,與語言環境互動並破壞它們的新應用程式或遊戲也可能導致類似的問題。一些用戶在Ubuntu的活動選單中搜尋終端時報告修復了這個問題。這表明這個

在Ubuntu系統中,root使用者通常是停用狀態的。要啟動root用戶,可以使用passwd指令設定密碼,然後使用su-指令以root身分登入。根用戶是具有系統管理權限且不受限制的使用者。他擁有存取和修改檔案、使用者管理、軟體安裝和刪除,以及系統配置變更等權限。根用戶與一般用戶有著明顯的區別,根用戶擁有系統中最高的權限和更廣泛的控制權。根用戶可以執行重要的系統命令和編輯系統文件,而普通用戶則無法做到這一點。在本指南中,我將探討Ubuntu根用戶,如何以根用戶身份登錄,以及它與一般用戶的不同之處。注意

Ubuntu24.04LTS,代號「NobleNumbat」即將發布!如果你正在使用的是Ubuntu23.10這類非LTS版本,遲早需要考慮升級。對於那些使用Ubuntu20.04LTS或Ubuntu22.04LTS的用戶,是否升級值得深思。 Canonical已經宣布,Ubuntu24.04LTS將提供長達12年的更新支持,細分如下:作為LTS版本,它將有5年的常規維護和安全更新。如果訂閱UbuntuPro,還能享有額外5年的支援。目前,這個額外的支援期限已經延長至7年,這意味著你將獲得長達12

OBS是由世界各地的志願貢獻者在空閒時間開發的開源軟體。一款視訊直播錄製軟體,主要用於視訊的錄製、直播的創流。 Ubuntu/Mint的安裝請注意,OBSStudio在ChromeOS上無法完全運作,螢幕和視窗捕捉等功能不能使用。建議使用xserver-xorg1.18.4或更新的版本,以避免OBS中某些功能的潛在效能問題,如全螢幕投影機。 FFmpeg是必要的如果你沒有安裝FFmpeg(如果你不確定,那麼你可能沒有),你可以用以下命令得到它:sudoaptinstallffmpeg我這裡已經安裝有了

要在UbuntuLinux中刪除FirefoxSnap,可以按照以下步驟進行操作:打開終端機並以管理員身份登入Ubuntu系統。執行以下命令以卸載FirefoxSnap:sudosnapremovefirefox系統將提示你輸入管理員密碼。輸入密碼並按下Enter鍵以確認。等待指令執行完成。一旦完成,FirefoxSnap將被完全刪除。請注意,這將刪除透過Snap套件管理器安裝的Firefox版本。如果你透過其他方式(如APT套件管理器)安裝了另一個版本的Firefox,則不會受到影響。透過上述步驟

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

對於許多用戶來說,破解 Android 電視盒聽起來令人畏懼。然而,在 Broadcom 晶片短缺期間,開發人員 Murray R. Van Luyn 面臨著尋找 Raspberry Pi 合適替代品的挑戰。他與 Armbia 的合作努力

本文詳細介紹了將Ubuntu20.04升級到22.04的步驟。對於使用Ubuntu20.04的用戶,錯過了22.04版本帶來的新功能和優勢。為了獲得更好的體驗和安全性,建議及時升級到較新的Ubuntu版本。 Ubuntu22.04的代號為“傑米水母”,讓我們一起來探索如何取得最新的LTS版本吧!如何透過命令列將Ubuntu20.04升級到22.04掌握命令列會為你帶來優勢。雖然透過GUI更新Ubuntu是可能的,但我們的重點將是透過命令列。首先,讓我們使用以下命令檢查目前運行的Ubuntu版本:$
