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

python tornado開啟多進(jìn)程的幾種方法

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

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

1. 使用多個進(jìn)程啟動多個Tornado實(shí)例

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ù)量相同的進(jìn)程
? ? tornado.ioloop.IOLoop.current().start()

2. 使用tornado.process.fork_processes()方法啟動多個進(jì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) #

tornado.process.fork_processes(2) 表示啟動2個進(jìn)程,每個進(jìn)程都會調(diào)用 server.start(0) 來啟動Tornado實(shí)例。注意:在使用 tornado.process.fork_processes() 啟動多進(jìn)程時,需要在 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進(jìn)程,具體實(shí)現(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進(jìn)程,每個進(jìn)程都會監(jiān)聽8888端口,并使用單獨(dú)的進(jìn)程處理請求。

4.使用第三方模塊gevent

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

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ù)量相同的進(jìn)程
? ? tornado.ioloop.IOLoop.current().start()

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

5.使用官方提供方式

listen:單進(jìn)程:

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

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

雖然此示例不會單獨(dú)創(chuàng)建多個進(jìn)程,但當(dāng)thereusereuse_port=True參數(shù)傳遞給listen()時,您可以多次運(yùn)行程序以創(chuàng)建多進(jìn)程服務(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一起使用,以運(yùn)行從單父分支的所有工作進(jìn)程的多進(jìn)程服務(wù)。如果您想以bind_sockets以外的某種方式創(chuàng)建監(jiān)聽套接字,add_sockets也可以在單進(jìn)程服務(wù)器中使用。

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

bind/start:簡單不建議使用的多進(jìn)程:

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

此模式被棄用,因?yàn)樗枰訮ython 3.10以來被棄用的asyncio模塊中的接口。在start方法中創(chuàng)建多個進(jìn)程的支持將在的未來版本中刪除。

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

6.使用supervisor

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

到此這篇關(guān)于python tornado開啟多進(jìn)程的幾種方法的文章就介紹到這了,更多相關(guān)python tornado多進(jìn)程內(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分詞實(shí)現(xiàn)snownlp情感分析

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

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

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

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

    使用python進(jìn)行量化交易的完整指南

    量化交易,作為現(xiàn)代金融市場中的一種先進(jìn)交易方式,通過運(yùn)用數(shù)學(xué)模型、統(tǒng)計(jì)方法和計(jì)算機(jī)算法來指導(dǎo)交易決策,旨在提高交易效率和決策的準(zhǔn)確性,本文將詳細(xì)介紹如何使用Python進(jìn)行量化交易,包括策略開發(fā)、數(shù)據(jù)處理、回測、風(fēng)險(xiǎn)管理和實(shí)盤交易等關(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é)合實(shí)例形式分析了Python使用try...except...finaly語句進(jìn)行錯誤處理的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python實(shí)現(xiàn)的維尼吉亞密碼算法示例

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

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

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

    imageio 是一個 Python 庫,用于讀取和寫入多種圖像和視頻格式,它功能強(qiáng)大、易于使用,廣泛應(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

最新評論

博罗县| 密山市| 霍林郭勒市| 西城区| 清河县| 永仁县| 钟山县| 方山县| 申扎县| 霍林郭勒市| 宁夏| 宁津县| 甘谷县| 仁布县| 苏尼特左旗| 大关县| 洪泽县| 宁安市| 密山市| 诏安县| 佛冈县| 怀宁县| 正蓝旗| 临夏市| 尼勒克县| 阿尔山市| 鄂托克旗| 禄劝| 察哈| 盐津县| 绥阳县| 东丰县| 永川市| 水城县| 伊金霍洛旗| 肇州县| 宝兴县| 芮城县| 永城市| 雅江县| 正蓝旗|