欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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.使用標準庫中的multiprocessing

除了以上提到的方式,還可以使用Python標準庫中的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)建多個進程,但當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接口更復雜,但它可以與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的字典和集合你了解嗎

    python的字典和集合你了解嗎

    章主要為大家詳細介紹了python的字典和集合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 基于Python和TFIDF實現(xiàn)提取文本中的關(guān)鍵詞

    基于Python和TFIDF實現(xiàn)提取文本中的關(guān)鍵詞

    TFIDF 的工作原理是按比例增加一個詞語在文檔中出現(xiàn)的次數(shù),但會被它所在的文檔數(shù)量抵消。本文將利用TFIDF實現(xiàn)提取文本中的關(guān)鍵詞,感興趣的小伙伴快跟隨小編一起學習一下吧
    2022-04-04
  • Python實現(xiàn)正則表達式匹配任意的郵箱方法

    Python實現(xiàn)正則表達式匹配任意的郵箱方法

    今天小編就為大家分享一篇Python實現(xiàn)正則表達式匹配任意的郵箱方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 利用Opencv實現(xiàn)圖片的油畫特效實例

    利用Opencv實現(xiàn)圖片的油畫特效實例

    這篇文章主要給大家介紹了關(guān)于利用Opencv實現(xiàn)圖片的油畫特效的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊列詳解(2)

    Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊列詳解(2)

    這篇文章主要為大家詳細介紹了Python中的隊列,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 如何通過python代碼根據(jù)模板修改變量生成新yaml文件

    如何通過python代碼根據(jù)模板修改變量生成新yaml文件

    有些時候,需要根據(jù)一個yaml模板創(chuàng)建多個yaml文件實例,我們先寫一個yaml文件模板,然后通過python代碼修改模板中的變量,存儲為一個新的yaml文件,需要配合python的庫Template及ymal使用,本文給大家講解的非常詳細,需要的朋友跟隨小編一起看看吧
    2023-11-11
  • Python?time模塊時間獲取和轉(zhuǎn)換方法

    Python?time模塊時間獲取和轉(zhuǎn)換方法

    這篇文章主要介紹了Python?time模塊時間獲取和轉(zhuǎn)換,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • tensorflow實現(xiàn)加載mnist數(shù)據(jù)集

    tensorflow實現(xiàn)加載mnist數(shù)據(jù)集

    這篇文章主要為大家詳細介紹了tensorflow實現(xiàn)加載mnist數(shù)據(jù)集,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python執(zhí)行系統(tǒng)命令的五種方式小結(jié)

    Python執(zhí)行系統(tǒng)命令的五種方式小結(jié)

    在日常開發(fā)中,有時需要在Python腳本中執(zhí)行系統(tǒng)命令,Python有五種方式來執(zhí)行系統(tǒng)命令(推薦使用第五種),本文為大家整理了這五種方法的具體使用,希望對大家有所幫助
    2024-01-01
  • tensorflow實現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集)

    tensorflow實現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集)

    這篇文章主要介紹了tensorflow實現(xiàn)殘差網(wǎng)絡(luò)方式(mnist數(shù)據(jù)集),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論