Python 通過監(jiān)聽端口實(shí)現(xiàn)唯一腳本運(yùn)行方式
我就廢話不多說了,大家還是直接看代碼吧
try: s = socket.socket() s.bind(('127.0.0.1', port)) except: log.info(' * already has an instance, so exit.') exit(0)
補(bǔ)充知識(shí):Python:一個(gè)簡(jiǎn)單的tornado程序:監(jiān)聽服務(wù)器端口,訪問時(shí)給瀏覽器返回一個(gè)字符串
一個(gè)簡(jiǎn)單的tornado程序
tornado是python里的一個(gè)模塊,它是一種web服務(wù)器軟件的開源版本
它作為web服務(wù)器,具有較出色的抗負(fù)載能力,它適用于用戶量大,高并發(fā),或者大量的HTTP持久連接的情況。
我們來看一段簡(jiǎn)單的程序代碼
import tornado.web import tornado.ioloop class IndexHander(tornado.web.RequestHander): def get(self): self.write("hello world! My name is alien!") if __name__ = "__main__": app = tornado.web.Application([ (r"/", IndexHander) ]) app.listen(8000) tornado.ioloop.IOLoop.current().start()
當(dāng)我們運(yùn)行這段程序時(shí),在瀏覽器上輸入ip+我們監(jiān)聽的端口就可以顯示這樣的效果:
那么我們現(xiàn)在逐句分析這段小代碼:
1、
import tornado.web
import tornado.ioloop
首先要進(jìn)行導(dǎo)入操作
這里的tornado.web是tornado的基礎(chǔ)web框架模塊
tornado.ioloop是tornado的核心I/O循環(huán)模塊(也就是說,服務(wù)一起,就不會(huì)自己關(guān)閉了)ioloop封裝了linux的epoll和BSD的kquene,這個(gè)循環(huán)模塊是tornado高效的基礎(chǔ)
2、
class IndexHander(tornado.web.RequestHander): def get(self): self.write("hello world! My name is alien!")
這里是創(chuàng)建了一個(gè)類,繼承了tornado.web.RequestHander類,其實(shí)就是一個(gè)業(yè)務(wù)處理類,用于接收請(qǐng)求的
里面的get函數(shù)就是處理get請(qǐng)求的
write函數(shù)這里返回了一個(gè)字符串,也就響應(yīng)信息為這段字符串
3、
if __name__ = "__main__":
這段python代碼就是當(dāng)入口函數(shù)為當(dāng)前文件時(shí),執(zhí)行以下代碼
4、
app = tornado.web.Application([ (r"/", IndexHander) ])
這段代碼是利用tornado.web下的Application類實(shí)例化出一個(gè)對(duì)象,這個(gè)對(duì)象名叫app,(r"/", IndexHander)這個(gè)是路由映射
Application類是tornado.web框架的核心應(yīng)用類,是與服務(wù)器對(duì)應(yīng)的接口,它里面保存了路由映射表
5、
app.listen(8000)
這里的listen是綁定了監(jiān)聽端口8000
用Application類創(chuàng)建出來的對(duì)象app中,有一個(gè)listen方法,因此可以直接調(diào)用listen
所以listen就是創(chuàng)建一個(gè)http服務(wù)器后綁定監(jiān)聽端口
注意注意:
這里的listen只是綁定了端口,并沒有開啟監(jiān)聽
6、
tornado.ioloop.IOLoop.current().start()
這里是啟動(dòng)該實(shí)例的I/O循環(huán)
IOLoop.current()返回了當(dāng)前線程的ioloop實(shí)例,也就是返回了一個(gè)對(duì)象–當(dāng)前線程讀寫操作的對(duì)象
IOLoop.start()啟動(dòng)了ioloop實(shí)例的I/O循環(huán),等待客戶端的鏈接
注意注意:
IOLoop.start()才開啟了監(jiān)聽,剛剛上面的listen是沒有開啟監(jiān)聽的
以上這篇Python 通過監(jiān)聽端口實(shí)現(xiàn)唯一腳本運(yùn)行方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python2.7:使用Pyhook模塊監(jiān)聽鼠標(biāo)鍵盤事件-獲取坐標(biāo)實(shí)例
- python利用wx實(shí)現(xiàn)界面按鈕和按鈕監(jiān)聽和字體改變的方法
- Python寫一個(gè)基于MD5的文件監(jiān)聽程序
- python 監(jiān)聽salt job狀態(tài),并任務(wù)數(shù)據(jù)推送到redis中的方法
- python hook監(jiān)聽事件詳解
- Python文件監(jiān)聽工具pyinotify與watchdog實(shí)例
- Python實(shí)現(xiàn)一個(gè)服務(wù)器監(jiān)聽多個(gè)客戶端請(qǐng)求
- Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽功能示例
- Python利用pyHook實(shí)現(xiàn)監(jiān)聽用戶鼠標(biāo)與鍵盤事件
- Python中使用PyHook監(jiān)聽鼠標(biāo)和鍵盤事件實(shí)例
- Python監(jiān)聽剪切板實(shí)現(xiàn)方法代碼實(shí)例
相關(guān)文章
Python中數(shù)字(Number)數(shù)據(jù)類型常用操作
本文主要介紹了Python中數(shù)字(Number)數(shù)據(jù)類型常用操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python?NumPy科學(xué)計(jì)算庫的高級(jí)應(yīng)用
這篇文章主要為大家介紹了Python?NumPy科學(xué)計(jì)算庫的高級(jí)應(yīng)用深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07一篇文章教你學(xué)會(huì)使用Python繪制甘特圖
甘特圖又稱為橫道圖、條狀圖,它是以作業(yè)排序?yàn)槟康?,將活?dòng)與時(shí)間聯(lián)系起來的最早嘗試的工具之一,能夠很直觀地顯示項(xiàng)目、進(jìn)度等和時(shí)間的內(nèi)在關(guān)系隨著時(shí)間的進(jìn)展情況,在管理和生產(chǎn)活動(dòng)中被廣泛使用2021-09-09Python中字典的基礎(chǔ)介紹及常用操作總結(jié)
字典也是python的數(shù)據(jù)類型中的一種,它由許多鍵值對(duì)組成,它是一種可變?nèi)萜髂P?一般情況下鍵是唯一的,字典支持嵌套,下面這篇文章主要給大家介紹了關(guān)于Python中字典的基礎(chǔ)介紹及常用操作,需要的朋友可以參考下2021-09-09python 應(yīng)用之Pycharm 新建模板默認(rèn)添加編碼格式-作者-時(shí)間等信息【推薦】
這篇文章主要介紹了Pycharm 新建模板默認(rèn)添加編碼格式-作者-時(shí)間等信息 ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06Python基于爬蟲實(shí)現(xiàn)全網(wǎng)搜索并下載音樂
這篇文章主要介紹了Python基于爬蟲實(shí)現(xiàn)全網(wǎng)搜索并下載音樂的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-02-02python標(biāo)準(zhǔn)庫之time模塊的語法與簡(jiǎn)單使用
在平常的代碼中,我們常常需要與時(shí)間打交道,那么在Python中,與時(shí)間處理有關(guān)的模塊就包括:time、datetime以及calendar,這篇文章主要給大家介紹了關(guān)于python標(biāo)準(zhǔn)庫之time模塊的語法與使用的相關(guān)資料,需要的朋友可以參考下2021-08-08