日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python同时监听多个端口_python bottle使用多个端口(多个进程)提高并发

發布時間:2023/12/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python同时监听多个端口_python bottle使用多个端口(多个进程)提高并发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我的程序是用python結合bottle框架寫的,但bottle自帶wsgi原本只是單進程單線程運行模式(Bottle 默認運行在內置的 wsgiref 服務器上面。這個單線程的 HTTP 服務器在開發的時候特別有用,但其性能低下,在服務器負載不斷增加的時候也許會是性能瓶頸, 一次只能響應一個請求)。為了提升程序的處理能力,首先要啟用多線程,即在程序中使用gevent( 大多數服務器的線程池都限制了線程池中線程的數量,避免創建和切換線程的代價。盡管和進程 (fork)比起來,線程還是挺便宜的。但是也沒便宜到可以接受為每一個請求創建一個線程。gevent 模塊添加了 greenlet 的支持。 greenlet 和傳統的線程類似,但其創建只需消耗很少的資源。基于 gevent 的服務器可以生成成千上萬的 greenlet,為每個連接分配一個 greenlet 也毫無壓力。阻塞greenlet,也不會影響到服務器接受新的請求。同時處理的連接數理論上是沒有限制的。)。只需要在run中加上 server='gevent',如下:

1 importgevent

2 from gevent importmonkey.patch_all()

3 代碼段……

4 run(host='0.0.0.0', port=8080, server='gevent')

盡管使用了多線程模式,但這些線程都是跑在一個進程里,所以需要開啟多個進程來進一步提升并發處理能力,因此在啟用腳本的時候,在run(port=)里,端口號不能寫死,應該使用變量來傳遞,如下代碼(在腳本執行時,在需帶一個參數,這個參數是大于1024的整數,否則報錯停止腳本):

importgevent,sys

from gevent importmonkey.patch_all()

#獲取端口號

try:

portnum = int(sys.argv[1])

exceptException,e:

print "請帶上整數類型的端口號啟動此程序"logging.error("請帶上整數類型的端口號啟動此程序")

sys.exit(1)

if portnum <= 1024:

print "端口號請大于1024!"logging.error("端口號請大于1024!")

sys.exit(1)

代碼段……

run(host='0.0.0.0', port=portnum , server='gevent')

執行方式如下(osyw.py是我python程序名):

python osyw.py 1124

如果純靠手動操作這些,在生產上,很不方便,所以我寫了個shell來管理,這個shell定義了多個端口號,然后去循環啟用或停止python進程,腳本大概如下(是用httpd改寫的):

#!/bin/bash

#

# osyw Startup script for the osyw HTTP Server

#

# chkconfig: - 88 18

# description: osyw

# processname: osyw

# config:

# config: /home/bottle/osyw/

# pidfile: /var/run/osyw.pid

#

### BEGIN INIT INFO

# Provides: osyw

# Short-Description: start and stop osyw HTTP Server

# Description: The osyw HTTP Server is an extensible server

# implementing the current HTTP standards.

### END INIT INFO

# Source function library.

. /etc/rc.d/init.d/functions

# Path to the apachectl script, server binary, and short-form for messages.

port_list=(8811 8812 8813) #設置了3個端口

#pidfile='/var/run/osyw.pid'

pro_path='/var/www/osyw/osyw.py' #程序路徑

log_path='/var/www/osyw/log/access.log' #訪問日志路徑

RETVAL=0

start() {

for i in ${port_list[*]}

do

p=`/usr/sbin/lsof -i :${i} |wc -l`

if [ ${p} -ge 2]

then

action "osyw ${i} already exists !" /bin/false

else

/usr/bin/python ${pro_path} ${i} &>>${log_path}

RETVAL=$?

if [ ${RETVAL} ==0 ]

then

action "osyw ${i} start ..." /bin/true

elseaction "osyw ${i} start ..." /bin/false

fi

fi

done

return$RETVAL

}

stop() {

for i in ${port_list[*]}

do

pidfile="/var/run/osyw_${i}.pid"

if [ -f ${pidfile} ]

then

pid=`cat ${pidfile}`

kill -9${pid}

RETVAL=$?

if [ ${RETVAL} ==0 ]

then

action "osyw ${i} stop ..." /bin/true

elseaction "osyw ${i} stop ..." /bin/false

fi

rm -f ${pidfile}

elseaction "osyw ${i} Has stopped !" /bin/false

fi

done

}

# See how we were called.

case "$1" instart)

start

;;

stop)

stop

;;

status)

status -p ${pidfile} 'osyw'RETVAL=$?

;;

restart)

stop

sleep 2start

;;

condrestart|try-restart)

if status -p ${pidfile} 'osyw' >&/dev/null; then

stop

start

fi

;;

force-reload|reload)

reload

;;

*)

echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"RETVAL=2esac

exit $RETVAL

效果圖:

本人的代碼是用svn管理的,所以上傳代碼后,SVN鉤子會調用shell腳本來重啟這些程序,以下是SVN鉤子代碼:

export LANG=en_US.UTF-8

/usr/bin/svn update --username xxxx --password xxxxxxxx /var/bottle

/bin/bash /etc/init.d/osyw restart

當然,為了結合shell,python程序里也要做一些處理,如自動把程序轉為后臺守護進程,然后把進程ID寫入文件,以下是關鍵的python代碼:

#定義PID路徑

pid_path = '/var/run/osyw_%s.pid' %portnum

defdaemonize():

"""把本腳本轉為守護進程"""

try:

pid=os.fork()

if pid>0:

sys.exit(0)

exceptException,e:

logging.error(e)

sys.exit(1)

os.chdir('/')

os.umask(0)

os.setsid()

try:

pid=os.fork()

if pid>0:

sys.exit(0)

exceptException,e:

logging.error(e)

sys.exit(1)

PID =str(os.getpid())

with open(pid_path,'w') as f:

f.write(PID)

其它代碼段……

if __name__ == '__main__':

try:

from oscore import setting #導入配置文件

if setting.status == 'online': #如果配置中是線上的,則程序轉入后臺運行

daemonize()

exceptException:

passapp =default_app()

app = SessionMiddleware(app, session_opts) #sessionMiddleware是session插件

run(app=app,host='0.0.0.0', port=portnum,server='gevent')

最好,用nginx代理來負載這些端口,我nginx和python程序是安裝在同一臺服務器上的:

以上是nginx反向代理的部分代碼:

upstream myweb {

#ip_hash;

server 192.168.1.240:8811 weight=4 max_fails=2 fail_timeout=30s;

server 192.168.1.240:8812 weight=4 max_fails=2 fail_timeout=30s;

server 192.168.1.240:8813 weight=4 max_fails=2 fail_timeout=30s;

}

server {

listen 80;

server_name 192.168.1.240;

location /{

proxy_pass http://myweb;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_cache_key $host$uri$is_args$args;

}

access_log off;

}

做完這些后,當訪問80端口時,nginx就會平均輪洵分配到每個端口上去,實現了多進程,多線程的運行模式,更有效的提升了并發處理能力

總結

以上是生活随笔為你收集整理的python同时监听多个端口_python bottle使用多个端口(多个进程)提高并发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美交| 苍井空亚洲精品aa片在线播放 | 337p嫩模大胆色肉噜噜噜 | 先锋资源一区二区 | 成人精品一区二区三区四区 | 精品国产乱子伦一区二区 | 亚洲国产精品成人综合久久久 | 精品国精品国产自在久不卡 | 日日狠狠久久偷偷四色综合免费 | 精品乱码久久久久久中文字幕 | 自拍偷拍麻豆 | 91亚洲视频在线 | 一级特黄aaa | 亚洲欧美日韩国产一区二区 | 黄色在线播放网站 | 四虎影视网 | 波多野在线播放 | 操碰在线观看 | 国产黄色片av | 美女扒开大腿让男人桶 | 国产调教 | 黄色小说在线免费观看 | 麻豆视频网站 | 国语对白久久 | 日韩一区二区三区四区五区六区 | 丰满人妻中伦妇伦精品app | 九色论坛| 日本一区二区三区成人 | 免费一级大片 | 国产人妻777人伦精品hd | 亚洲成人一区二区在线观看 | 日韩欧美一区二区三区 | 三级黄色片免费 | 国产精品无码天天爽视频 | 99热精品在线 | 玖草在线视频 | 西西人体做爰大胆gogo直播 | 国产日产欧洲无码视频 | 影音先锋亚洲精品 | 成人h动漫精品一区二区下载 | 国产福利在线 | 亚久久 | 超碰97人人在线 | 女王脚交玉足榨精调教 | 欧美乱妇日本无乱码特黄大片 | 欧美日韩国产精品成人 | 国产老妇伦国产熟女老妇视频 | 国产日本亚洲 | av视屏| 亚洲av无码一区二区三区在线播放 | 美女扒开腿让男生捅 | 国产精品亚洲专区无码牛牛 | 亚洲最大av在线 | 一二区在线观看 | 亚洲五码在线 | 制服丝袜国产在线 | 国产精品麻豆入口 | 国产欧美在线观看视频 | 天天干天天做天天操 | 风间由美一区二区三区 | 亚洲少妇一区二区三区 | 2021中文字幕| 欧美乱妇日本无乱码特黄大片 | 97成人在线视频 | 污污内射在线观看一区二区少妇 | 亚洲日本一区二区三区 | 少妇裸体淫交视频免费看高清 | 一级做a爱片久久 | 国产精品毛片一区视频播 | av这里只有精品 | 娇小萝被两个黑人用半米长 | 香蕉视频99 | 动漫3d精品一区二区三区乱码 | www.青青草.com | 爱爱高潮视频 | 免费在线观看a视频 | 天天噜日日噜 | 国产成人视屏 | 国产淫| 欧美乱做爰xxxⅹ久久久 | 亚洲区视频在线观看 | 色呦呦网| 九九九在线观看 | 亚洲a视频在线观看 | 成人黄色片免费 | 国产12页| 福利视频在线导航 | free国产hd露脸性开放 | 国产黄色一级片视频 | 亚洲涩涩网站 | 欧美在线一区二区视频 | 天天操天天干天天插 | 男操女免费网站 | 欧美亚洲一二三区 | 久久久综合色 | 国色天香av | 成人欧美一级特黄 | 国产日韩欧美精品一区 | 99精品热 |