最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python tornado開啟多進程的幾種方法

 更新時間:2023年04月16日 11:12:41   作者:終成一個大象  
本文主要介紹了python tornado開啟多進程的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

以下各種方式僅供參考,本人親測只有官方提供的方式比較靠譜。

1. 使用多個進程啟動多個Tornado實例

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

class MainHandler(tornado.web.RequestHandler):
? ? def get(self):
? ? ? ? self.write("Hello, world")

if __name__ == "__main__":
? ? app = tornado.web.Application([(r"/", MainHandler)])
? ? server = tornado.httpserver.HTTPServer(app)
? ? server.bind(8888)
? ? server.start(0) ?# 0 表示啟動與CPU數(shù)量相同的進程
? ? tornado.ioloop.IOLoop.current().start()

2. 使用tornado.process.fork_processes()方法啟動多個進程

import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.process

class MainHandler(tornado.web.RequestHandler):
? ? def get(self):
? ? ? ? self.write("Hello, world")

if __name__ == "__main__":
? ? app = tornado.web.Application([(r"/", MainHandler)])
? ? server = tornado.httpserver.HTTPServer(app)
? ? server.bind(8888)
? ? tornado.process.fork_processes(2) #

tornado.process.fork_processes(2) 表示啟動2個進程,每個進程都會調(diào)用 server.start(0) 來啟動Tornado實例。注意:在使用 tornado.process.fork_processes() 啟動多進程時,需要在 if __name__ == "__main__": 中調(diào)用該方法,否則會出現(xiàn)錯誤。

完整代碼如下:

import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.process

class MainHandler(tornado.web.RequestHandler):
? ? def get(self):
? ? ? ? self.write("Hello, world")

if __name__ == "__main__":
? ? app = tornado.web.Application([(r"/", MainHandler)])
? ? server = tornado.httpserver.HTTPServer(app)
? ? server.bind(8888)
? ? tornado.process.fork_processes(2)
? ? server.start(0)
? ? tornado.ioloop.IOLoop.current().start()

3.使用標(biāo)準(zhǔn)庫中的multiprocessing

除了以上提到的方式,還可以使用Python標(biāo)準(zhǔn)庫中的multiprocessing模塊來啟動多個Tornado進程,具體實現(xiàn)可以參考以下示例代碼:

import tornado.httpserver
import tornado.ioloop
import tornado.web
from multiprocessing import Process

class MainHandler(tornado.web.RequestHandler):
? ? def get(self):
? ? ? ? self.write("Hello, world")

def start_tornado():
? ? app = tornado.web.Application([(r"/", MainHandler)])
? ? server = tornado.httpserver.HTTPServer(app)
? ? server.listen(8888)
? ? tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":
? ? processes = []
? ? for i in range(2):
? ? ? ? p = Process(target=start_tornado)
? ? ? ? p.start()
? ? ? ? processes.append(p)
? ? for p in processes:
? ? ? ? p.join()

這段代碼會啟動兩個Tornado進程,每個進程都會監(jiān)聽8888端口,并使用單獨的進程處理請求。

4.使用第三方模塊gevent

還有一個方式是使用第三方模塊gevent來實現(xiàn)協(xié)程并發(fā),配合Tornado使用可以達到類似多進程的效果,但是只使用一個進程。示例代碼如下:

import gevent.monkey
gevent.monkey.patch_all()

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

class MainHandler(tornado.web.RequestHandler):
? ? def get(self):
? ? ? ? self.write("Hello, world")

if __name__ == "__main__":
? ? app = tornado.web.Application([(r"/", MainHandler)])
? ? server = tornado.httpserver.HTTPServer(app)
? ? server.bind(8888)
? ? server.start(0) ?# 0 表示啟動與CPU數(shù)量相同的進程
? ? tornado.ioloop.IOLoop.current().start()

在上面的代碼中,我們引入了gevent.monkey模塊,使用patch_all()方法將所有的阻塞式IO替換為非阻塞式IO,然后在啟動Tornado時,使用server.start(0)方法啟動與CPU數(shù)量

5.使用官方提供方式

listen:單進程:

    async def main():
        server = HTTPServer()
        server.listen(8888)
        await asyncio.Event.wait()
    
    asyncio.run(main())

在許多情況下,tornado.web.Application.listen可用于避免明確創(chuàng)建HTTPServer的需要。

雖然此示例不會單獨創(chuàng)建多個進程,但當(dāng)thereusereuse_port=True參數(shù)傳遞給listen()時,您可以多次運行程序以創(chuàng)建多進程服務(wù)。

add_sockets:多過程:

    sockets = bind_sockets(8888)
    tornado.process.fork_processes(0)
    async def post_fork_main():
        server = HTTPServer()
        server.add_sockets(sockets)
        await asyncio.Event().wait()
    asyncio.run(post_fork_main())

add_sockets接口更復(fù)雜,但它可以與tornado.process.fork_processes一起使用,以運行從單父分支的所有工作進程的多進程服務(wù)。如果您想以bind_sockets以外的某種方式創(chuàng)建監(jiān)聽套接字,add_sockets也可以在單進程服務(wù)器中使用。

請注意,使用此模式時,觸及事件循環(huán)的任何東西都不能在fork_processes之前運行。

bind/start:簡單不建議使用的多進程:

    server = HTTPServer()
    server.bind(8888)
    server.start(0)  # Forks multiple sub-processes
    IOLoop.current().start()

此模式被棄用,因為它需要自Python 3.10以來被棄用的asyncio模塊中的接口。在start方法中創(chuàng)建多個進程的支持將在的未來版本中刪除。

此模式就是文中所說的第一種模式,單從官方文檔來看,這種方式已經(jīng)被拋棄,本人在實測中也發(fā)現(xiàn)存在問題:無法完全關(guān)閉fork的子進程。

6.使用supervisor

使用supervisor等進程管理工具來管理多個Tornado進程,這種方式可以更加方便地監(jiān)控和管理多個進程,不過需要額外的配置和安裝進程管理工具。

到此這篇關(guān)于python tornado開啟多進程的幾種方法的文章就介紹到這了,更多相關(guān)python tornado多進程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的幾種矩陣乘法(小結(jié))

    Python中的幾種矩陣乘法(小結(jié))

    這篇文章主要介紹了Python中的幾種矩陣乘法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python基于jieba分詞實現(xiàn)snownlp情感分析

    Python基于jieba分詞實現(xiàn)snownlp情感分析

    情感分析(sentiment analysis)是2018年公布的計算機科學(xué)技術(shù)名詞,它可以根據(jù)文本內(nèi)容判斷出所代表的含義是積極的還是負(fù)面的等。本文將通過jieba分詞實現(xiàn)snownlp情感分析,感興趣的可以了解一下
    2023-01-01
  • Python圖片縮放cv2.resize()圖文詳解

    Python圖片縮放cv2.resize()圖文詳解

    這篇文章主要給大家介紹了關(guān)于Python圖片縮放cv2.resize()的相關(guān)資料, resize是opencv庫中的一個函數(shù),主要起到對圖片進行縮放的作用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 使用python進行量化交易的完整指南

    使用python進行量化交易的完整指南

    量化交易,作為現(xiàn)代金融市場中的一種先進交易方式,通過運用數(shù)學(xué)模型、統(tǒng)計方法和計算機算法來指導(dǎo)交易決策,旨在提高交易效率和決策的準(zhǔn)確性,本文將詳細(xì)介紹如何使用Python進行量化交易,包括策略開發(fā)、數(shù)據(jù)處理、回測、風(fēng)險管理和實盤交易等關(guān)鍵步驟
    2024-09-09
  • Python Pytorch深度學(xué)習(xí)之核心小結(jié)

    Python Pytorch深度學(xué)習(xí)之核心小結(jié)

    今天小編就為大家分享一篇關(guān)于Pytorch核心小結(jié)的文章,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-10-10
  • Python錯誤處理操作示例

    Python錯誤處理操作示例

    這篇文章主要介紹了Python錯誤處理操作,結(jié)合實例形式分析了Python使用try...except...finaly語句進行錯誤處理的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • Python實現(xiàn)的維尼吉亞密碼算法示例

    Python實現(xiàn)的維尼吉亞密碼算法示例

    這篇文章主要介紹了Python實現(xiàn)的維尼吉亞密碼算法,結(jié)合實例形式分析了基于Python實現(xiàn)維尼吉亞密碼算法的定義與使用相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python使用imageio庫處理圖像與視頻的操作詳解

    Python使用imageio庫處理圖像與視頻的操作詳解

    imageio 是一個 Python 庫,用于讀取和寫入多種圖像和視頻格式,它功能強大、易于使用,廣泛應(yīng)用于圖像處理、視頻編輯和數(shù)據(jù)可視化等領(lǐng)域,本篇文章將介紹 imageio 的基礎(chǔ)功能、常見用法以及高級操作,需要的朋友可以參考下
    2024-12-12
  • Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與用法

    Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與用法

    元組(tuple)是 Python 中另一個重要的序列結(jié)構(gòu),和列表類似,元組也是由一系列按特定順序排序的元素組成,這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與使用方法,需要的朋友可以參考下
    2021-07-07
  • pandas數(shù)據(jù)清洗,排序,索引設(shè)置,數(shù)據(jù)選取方法

    pandas數(shù)據(jù)清洗,排序,索引設(shè)置,數(shù)據(jù)選取方法

    下面小編就為大家分享一篇pandas數(shù)據(jù)清洗,排序,索引設(shè)置,數(shù)據(jù)選取方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

兴业县| 宜州市| 馆陶县| 潼南县| 囊谦县| 崇仁县| 鲁山县| 台东市| 肥东县| 仙游县| 黎平县| 临猗县| 扎兰屯市| 阳朔县| 台中市| 四会市| 安塞县| 宁都县| 改则县| 汉沽区| 阳泉市| 隆昌县| 水富县| 洛南县| 神池县| 新巴尔虎左旗| 伊金霍洛旗| 馆陶县| 晋中市| 盐池县| 攀枝花市| 乌恰县| 金寨县| 长汀县| 尚义县| 西藏| 宜兰市| 两当县| 滨州市| 大兴区| 翁源县|