成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python:Tornado 第四章:Tornado網(wǎng)站部署:第三節(jié):運(yùn)營(yíng)期配置

Donald / 3166人閱讀

摘要:上一篇文章第四章網(wǎng)站部署第二節(jié)靜態(tài)文件后臺(tái)運(yùn)行一般調(diào)試過程中我們使用運(yùn)行網(wǎng)站,方便我們?cè)诿钚兄锌催\(yùn)行狀況。默認(rèn)情況下,會(huì)監(jiān)控子進(jìn)程,并在任何程序意外終止時(shí)重生。配合實(shí)現(xiàn)多進(jìn)程在中添加接受命令行參數(shù)可在配置文件中添加使用代理

上一篇文章:Python:Tornado 第四章:Tornado網(wǎng)站部署:第二節(jié):靜態(tài)文件
1、后臺(tái)運(yùn)行

一般調(diào)試過程中我們使用python app.py運(yùn)行網(wǎng)站,方便我們?cè)诿钚兄锌催\(yùn)行狀況。

但在生產(chǎn)環(huán)境下我們需要后臺(tái)運(yùn)行網(wǎng)站。我們可以使用linux的nohup命令。

nohup python app.py >> log/app.log &
2、supervisor守護(hù)進(jìn)程

使用nuhup可以后臺(tái)運(yùn)行一個(gè)進(jìn)程,但是一旦網(wǎng)站出現(xiàn)錯(cuò)誤,進(jìn)程關(guān)閉,網(wǎng)站將會(huì)停止運(yùn)行。這時(shí)候就需要supervisor來幫我們守護(hù)進(jìn)程,自動(dòng)重啟網(wǎng)站。

Supervisord是用Python實(shí)現(xiàn)的一款非常實(shí)用的進(jìn)程管理工具。

安裝 配置

sudo apt-get install supervisor
修改配置文/etc/supervisord.conf
只需要將最后一行改為下面的形式就可以了:
[include]
files = /etc/supervisor/conf.d/.conf
默認(rèn)好像是以“/.ini”結(jié)尾的配置文件

Supervisor 配置文件 /etc/supervisor/conf.d:

在/etc/supervisor/conf.d/下創(chuàng)建文件:tornado.conf

# 為了方便管理,增加一個(gè)tornado組
[group:tornados]
programs=tornado-0,tornado-1,tornado-2
# 分別定義三個(gè)tornado的進(jìn)程配置
[program:tornado-0]
# 進(jìn)程要執(zhí)行的命令
command=python /data/web/advance_python/tornado_asyn/hello.py --port=8020
directory=/data/web/advance_python/tornado_asyn/
user=www-data
# 自動(dòng)重啟
autorestart=true
redirect_stderr=true
# 日志路徑
stdout_logfile=/home/lidongwei/log/supervisor/tornado/tornado0.log
loglevel=info
[program:tornado-1]
command=python /data/web/advance_python/tornado_asyn/hello.py --port=8021
directory=/data/web/advance_python/tornado_asyn/
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/home/lidongwei/log/supervisor/tornado/tornado1.log
loglevel=info
[program:tornado-2]
command=python /data/web/advance_python/tornado_asyn/hello.py --port=8022
directory=/data/web/advance_python/tornado_asyn/
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/home/lidongwei/log/supervisor/tornado/tornado2.log

啟動(dòng)supervisor

使用默認(rèn)的配置文件 /etc/supervisord.conf
supervisord
明確指定配置文件
supervisord -c /etc/supervisord.conf
使用 user 用戶啟動(dòng)supervisord
supervisord -u user

查看、操作進(jìn)程狀態(tài)

[/etc/supervisor/conf.d]$ sudo supervisorctl
[sudo] password for lidongwei:
tornados:tornado-0 RUNNING pid 10012, uptime 1:22:04
tornados:tornado-1 RUNNING pid 10011, uptime 1:22:04
tornados:tornado-2 RUNNING pid 10013, uptime 1:22:04

# 停止運(yùn)行tornado-1服務(wù)器進(jìn)程
supervisor> stop tornados:tornado-1
tornados:tornado-1: stopped
supervisor> status
tornados:tornado-0 RUNNING pid 10012, uptime 1:23:19
tornados:tornado-1 STOPPED Mar 12 06:46 PM
tornados:tornado-2 RUNNING pid 10013, uptime 1:23:19

# 停止運(yùn)行整個(gè)tornado服務(wù)器進(jìn)程組
supervisor> stop tornados:
tornado-0: stopped
tornado-2: stopped
supervisor> status
tornados:tornado-0 STOPPED Mar 12 06:50 PM
tornados:tornado-1 STOPPED Mar 12 06:46 PM
tornados:tornado-2 STOPPED Mar 12 06:50 PM

supervisorctl 命令介紹

supervisorctl stop program_name
啟動(dòng)某個(gè)進(jìn)程
supervisorctl start program_name
重啟某個(gè)進(jìn)程
supervisorctl restart program_name
結(jié)束所有屬于名為 groupworker 這個(gè)分組的進(jìn)程 (start,restart 同理)
supervisorctl stop groupworker:
結(jié)束 groupworker:name1 這個(gè)進(jìn)程 (start,restart 同理)
supervisorctl stop groupworker:name1
停止全部進(jìn)程,注:start、restart、stop 都不會(huì)載入最新的配置文件
supervisorctl stop all
載入最新的配置文件,停止原有進(jìn)程并按新的配置啟動(dòng)、管理所有進(jìn)程
supervisorctl reload
根據(jù)最新的配置文件,啟動(dòng)新配置或有改動(dòng)的進(jìn)程,配置沒有改動(dòng)的進(jìn)程不會(huì)受影響而重啟
supervisorctl update

總結(jié)

Supervisor和你系統(tǒng)的初始化進(jìn)程一起工作,并且它應(yīng)該在系統(tǒng)啟動(dòng)時(shí)自動(dòng)注冊(cè)守護(hù)進(jìn)程。
當(dāng)supervisor啟動(dòng)后,程序組會(huì)自動(dòng)在線。默認(rèn)情況下,Supervisor會(huì)監(jiān)控子進(jìn)程,并在任何程序意外終止時(shí)重生
。如果你想不管錯(cuò)誤碼,重啟被管理的進(jìn)程,你可以設(shè)置autorestart為true。
Supervisor不只可以使管理多個(gè)Tornado實(shí)例更容易,還能讓你在Tornado服務(wù)器遇到意外的服務(wù)中斷后重新上線時(shí)泰然處之。
三個(gè)tornado進(jìn)程都正常運(yùn)行,并且比逐個(gè)管理方便的多
3、nginx代理多進(jìn)程

雖然Tornado的內(nèi)置IOLoop服務(wù)器可以直接作為運(yùn)營(yíng)服務(wù)器運(yùn)行,但部署一個(gè)應(yīng)用到生產(chǎn)環(huán)境面臨著最大化利用系統(tǒng)資源的新挑戰(zhàn)。因?yàn)門ornado架構(gòu)的異步特性,無法用大多數(shù)Python網(wǎng)絡(luò)框架標(biāo)準(zhǔn)WSGI進(jìn)行站點(diǎn)部署,為了強(qiáng)化Tornado應(yīng)用的請(qǐng)求吞吐量,在運(yùn)營(yíng)環(huán)境中通常采用反向代理+多Tornado后臺(tái)實(shí)例的部署策略。

反向代理是代理服務(wù)器的一張。它根據(jù)客戶端的請(qǐng)求,從后端的服務(wù)器上獲取資源,然后將這些資源返回給客戶端。當(dāng)前最常用的開源反向代理服務(wù)器是Nginx:網(wǎng)站通過Internet DNS服務(wù)器將用戶瀏覽器的訪問定位到多臺(tái)Nginx服務(wù)器上,每臺(tái)Nginx服務(wù)器又將訪問重定向到多臺(tái)Tornado服務(wù)器上。多個(gè)Tornado服務(wù)器既可以部署在一臺(tái)物理機(jī)上,也可以部署在多臺(tái)物理機(jī)上。以資源最大化利用為目的,應(yīng)該以每個(gè)物理機(jī)的CPU數(shù)量來決定分配在該臺(tái)物理機(jī)上運(yùn)行的Tornado實(shí)例數(shù)。

Nginx配置反向代理的方法非常簡(jiǎn)單,打開Nginx配置文件nginx.conf,進(jìn)行類似如下配置,然后重啟Nginx服務(wù)器即可:

user nginx;
worker_process 5;

error_log /var/log/nginx/error.log

pid /var/run/nginx.pid;

events{
use epoll;
}

proxy_next_upstream error;

upstream backs{
//配置3個(gè)后臺(tái)Tornado服務(wù)
server 192.168.0.1:8001;
server 192.169.0.1:8002;
server 192.168.0.2:8003;
}

server{
listen 80; //監(jiān)聽80端口
server_name www.mysite.com;
}

location / {
proxy_pass http://backs;
}

除了一些標(biāo)準(zhǔn)配置,這個(gè)配置文件最重要的部分是upstram、listen和prox_pass指令。upstream backs{}定義了3個(gè)人后臺(tái)Tornado服務(wù)的IP地址及各自的端口號(hào);server{}中的listen定義了Nginx監(jiān)聽端口號(hào)80;proxy_pass定義了所有對(duì)根目錄的訪問由之前定義的upstream backs中的服務(wù)器組提供服務(wù),在默認(rèn)情況下Nginx以循環(huán)方式分配到達(dá)的訪問請(qǐng)求。_

4、nginx配合supervisor實(shí)現(xiàn)多進(jìn)程

在app.py中添加接受命令行參數(shù):

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        greeting = self.get_argument("greeting", "Hello")
        self.write(greeting + ", friendly user!")

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

可在supervisor配置文件中添加:

[program:tornado-8000]
command=python /var/www/main.py --port=8000
directory=/var/www
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info

[program:tornado-8001]
command=python /var/www/main.py --port=8001
directory=/var/www
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info

使用nginx代理:

user nginx;
worker_processes 5;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
proxy_next_upstream error;
upstream tornadoes {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.example.org *.example.org;
location /static/ {
root /var/www/static;
if ($query_string) {
expires max;
}
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://tornadoes;
}
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44791.html

相關(guān)文章

  • PythonTornado 四章Tornado網(wǎng)站部署:第二節(jié):靜態(tài)文件

    摘要:提供了兩種方式進(jìn)行配置靜態(tài)文件路徑與服務(wù)器本地路徑的關(guān)聯(lián)關(guān)系。通常這些靜態(tài)文件的目錄與網(wǎng)站的代碼文件有某種相對(duì)關(guān)聯(lián)關(guān)系,可以通過下面這樣的方法將該參數(shù)設(shè)置為相對(duì)路徑此處寫入映射即指定靜態(tài)目錄為本程序文件所在目錄的子目錄。 上一篇文章:Python:Tornado 第四章:Tornado網(wǎng)站部署:第一節(jié):調(diào)試模式下一篇文章:Python:Tornado 第四章:Tornado網(wǎng)站部署:第...

    trilever 評(píng)論0 收藏0
  • PythonTornado 四章Tornado網(wǎng)站部署:第一節(jié):調(diào)試模式

    摘要:上一篇文章第三章概念及應(yīng)用第三節(jié)客戶端編程下一篇文章第四章網(wǎng)站部署第二節(jié)靜態(tài)文件之前著重講解的編程知識(shí)點(diǎn),所有之前的例子都使用最簡(jiǎn)單的啟動(dòng)方式運(yùn)行。 上一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及應(yīng)用:第三節(jié):客戶端編程下一篇文章:Python:Tornado 第四章:Tornado網(wǎng)站部署:第二節(jié):靜態(tài)文件 之前著重講解Tornado的編程知...

    desdik 評(píng)論0 收藏0
  • PythonTornado 第三章:HTML5 WebSocket概念及應(yīng)用:三節(jié):客戶端編程

    摘要:上一篇文章第三章概念及應(yīng)用第二節(jié)服務(wù)端編程下一篇文章第四章網(wǎng)站部署第一節(jié)調(diào)試模式由于是的標(biāo)準(zhǔn)之一,所以主流瀏覽器的客戶端編程語音已經(jīng)支持的客戶端編程。此事件發(fā)生在收到了來自服務(wù)器的消息時(shí)。此事件發(fā)生在通信過程中有任何錯(cuò)誤時(shí)。 上一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及應(yīng)用:第二節(jié):服務(wù)端編程下一篇文章:Python:Tornado 第四章:T...

    miguel.jiang 評(píng)論0 收藏0
  • PythonTornado 第二章:實(shí)戰(zhàn)演練:開發(fā)Tornado網(wǎng)站三節(jié):RequestHan

    摘要:上一篇文章第二章實(shí)戰(zhàn)演練開發(fā)網(wǎng)站第二節(jié)路由解析下一篇文章第二章實(shí)戰(zhàn)演練開發(fā)網(wǎng)站第四節(jié)輸入捕捉需要子類繼承并定義具體行為的函數(shù)在中被稱為接入點(diǎn)函數(shù)上面的實(shí)例中的函數(shù)就是典型的接入點(diǎn)函數(shù)。 上一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開發(fā)Tornado網(wǎng)站:第二節(jié):路由解析下一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開發(fā)Tornado網(wǎng)站:第四節(jié):Reque...

    Fourierr 評(píng)論0 收藏0
  • PythonTornado 第二章:實(shí)戰(zhàn)演練:開發(fā)Tornado網(wǎng)站第四節(jié):RequestHan

    摘要:上一篇文章第二章實(shí)戰(zhàn)演練開發(fā)網(wǎng)站第三節(jié)接入點(diǎn)函數(shù)下一篇文章第二章實(shí)戰(zhàn)演練開發(fā)網(wǎng)站第五節(jié)輸出相應(yīng)函數(shù)輸入捕捉是指在中用于獲取客戶端輸入的工具函數(shù)和屬性。是獲取單個(gè)值而在參數(shù)存在多個(gè)值得情況下使用,返回多個(gè)值的列表。 上一篇文章:Python:Tornado 第二章:實(shí)戰(zhàn)演練:開發(fā)Tornado網(wǎng)站:第三節(jié):RequestHandler:接入點(diǎn)函數(shù)下一篇文章:Python:Tornado ...

    blankyao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<