iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python tornado开启多进程的方法有哪些
  • 149
分享到

python tornado开启多进程的方法有哪些

2023-07-06 05:07:00 149人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python tornado开启多进程的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python tornado开启多进程的方法有哪些”吧

这篇文章主要讲解了“python tornado开启多进程的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python tornado开启多进程的方法有哪些”吧!

1. 使用多个进程启动多个Tornado实例

import tornado.httpserverimport tornado.ioloopimport tornado.WEBclass 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数量相同的进程    tornado.ioloop.IOLoop.current().start()

2. 使用tornado.process.fork_processes()方法启动多个进程

import tornado.httpserverimport tornado.ioloopimport tornado.webimport tornado.processclass 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个进程,每个进程都会调用 server.start(0) 来启动Tornado实例。注意:在使用 tornado.process.fork_processes() 启动多进程时,需要在 if __name__ == "__main__": 中调用该方法,否则会出现错误。

完整代码如下:

import tornado.httpserverimport tornado.ioloopimport tornado.webimport tornado.processclass 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进程,具体实现可以参考以下示例代码:

import tornado.httpserverimport tornado.ioloopimport tornado.webfrom multiprocessing import Processclass 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进程,每个进程都会监听8888端口,并使用单独的进程处理请求。

4.使用第三方模块gevent

还有一个方式是使用第三方模块gevent来实现协程并发,配合Tornado使用可以达到类似多进程的效果,但是只使用一个进程。示例代码如下:

import gevent.monkeygevent.monkey.patch_all()import tornado.httpserverimport tornado.ioloopimport tornado.webclass 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数量相同的进程    tornado.ioloop.IOLoop.current().start()

在上面的代码中,我们引入了gevent.monkey模块,使用patch_all()方法将所有的阻塞式IO替换为非阻塞式IO,然后在启动Tornado时,使用server.start(0)方法启动与CPU数量

5.使用官方提供方式

listen:单进程:

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

在许多情况下,tornado.web.Application.listen可用于避免明确创建HTTPServer的需要。

虽然此示例不会单独创建多个进程,但当thereusereuse_port=True参数传递给listen()时,您可以多次运行程序以创建多进程服务。

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一起使用,以运行从单父分支的所有工作进程的多进程服务。如果您想以bind_sockets以外的某种方式创建监听套接字,add_sockets也可以在单进程服务器中使用。

请注意,使用此模式时,触及事件循环的任何东西都不能在fork_processes之前运行。

bind/start:简单不建议使用的多进程:

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

此模式被弃用,因为它需要自Python 3.10以来被弃用的asyncio模块中的接口。在start方法中创建多个进程的支持将在的未来版本中删除。

此模式就是文中所说的第一种模式,单从官方文档来看,这种方式已经被抛弃,本人在实测中也发现存在问题:无法完全关闭fork的子进程。

6.使用supervisor

使用supervisor等进程管理工具来管理多个Tornado进程,这种方式可以更加方便地监控和管理多个进程,不过需要额外的配置和安装进程管理工具。

感谢各位的阅读,以上就是“python tornado开启多进程的方法有哪些”的内容了,经过本文的学习后,相信大家对python tornado开启多进程的方法有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: python tornado开启多进程的方法有哪些

本文链接: https://www.lsjlt.com/news/357763.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python tornado开启多进程的方法有哪些
    这篇文章主要讲解了“python tornado开启多进程的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python tornado开启多进程的方法有哪些”吧...
    99+
    2023-07-06
  • Java开启多线程的方法有哪些
    这篇文章主要介绍“Java开启多线程的方法有哪些”,在日常操作中,相信很多人在Java开启多线程的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java开启多线程的方法有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Java开启多线程的常见方法有哪些
    Java开启多线程的常见方法有以下几种:1. 继承Thread类:定义一个类继承Thread类,并重写run()方法,然后创建该类的...
    99+
    2023-08-15
    Java
  • android开启线程的方法有哪些
    在Android中,可以通过以下几种方式开启线程:1. 使用Thread类:创建一个继承自Thread类的子类,并实现run()方法...
    99+
    2023-08-12
    android
  • java开启线程的方法有哪些
    在Java中,开启线程有多种方法:1. 继承Thread类并重写run()方法。这是一种最常见的方法,直接继承Thread类,并在子...
    99+
    2023-09-21
    java
  • pythontornado开启多进程的几种方法
    目录1. 使用多个进程启动多个Tornado实例2. 使用tornado.process.fork_processes()方法启动多个进程3.使用标准库中的multiprocessi...
    99+
    2023-05-16
    python tornado多进程 tornado多进程
  • python怎么开启多进程
    在 python 中开启多进程的方法有:使用 multiprocessing 模块提供 process 类。使用 concurrent.futures 模块提供 processpoole...
    99+
    2024-05-14
    python
  • C++中多进程同步的方法有哪些
    信号量(semaphore):使用系统提供的信号量来实现多进程之间的同步和互斥操作。 互斥锁(mutex):使用互斥锁来保护...
    99+
    2024-04-02
  • python实现多线程的方法有哪些
    在Python中,实现多线程的方法有以下几种方式:1. 使用`threading`模块:`threading`模块是Python标准...
    99+
    2023-08-15
    python
  • Linux进程启动方式有哪些
    这篇文章主要讲解了“Linux进程启动方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux进程启动方式有哪些”吧! ...
    99+
    2023-02-13
    linux
  • Python进程池与进程锁常用的方法有哪些
    这篇文章主要介绍“Python进程池与进程锁常用的方法有哪些”,在日常操作中,相信很多人在Python进程池与进程锁常用的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python进程池与进程锁常用...
    99+
    2023-06-30
  • python的多线程创建的方法有哪些
    本篇内容介绍了“python的多线程创建的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python多线程一、线程的概念线程是CP...
    99+
    2023-07-04
  • Python多进程知识点有哪些
    这篇文章主要讲解了“Python多进程知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程知识点有哪些”吧!一、什么是多进程?1. 进程程序:例如xxx.py这是程序...
    99+
    2023-06-30
  • Oracle开启和关闭的方法有哪些
    这篇文章主要介绍了Oracle开启和关闭的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。>1 启动数据库  在cmd命令窗口...
    99+
    2024-04-02
  • linux杀进程的方法有哪些
    本文小编为大家详细介绍“linux杀进程的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux杀进程的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。常规...
    99+
    2024-04-02
  • Python多进程与多线程的使用场景有哪些
    这篇文章主要介绍Python多进程与多线程的使用场景有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言Python多进程适用的场景:计算密集型(CPU密集型)任务Python多线程适用的场景:IO密集型任务计算...
    99+
    2023-06-07
  • Python多进程multiprocessing包有哪些工具
    这篇文章主要介绍“Python多进程multiprocessing包有哪些工具”,在日常操作中,相信很多人在Python多进程multiprocessing包有哪些工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-02
  • win10开启多核的作用有哪些
    开启多核可以提升计算机的性能和效率,具体作用包括: 提升多线程应用程序的性能:当一个应用程序能够同时运行多个线程时,开启多核可以...
    99+
    2023-10-25
    win10
  • Win7剪贴板如何开启都有哪些开启方法
      Windows的剪贴板大家都知道,用来暂时存放数据的一个模块,我们在平时操作Win7系统时经常会用到,如果用户经常大量复制粘贴文件,剪贴板则会存放越来越多的数据,导致系统资源被占用,影响了运行速度。因此我们应该定时清...
    99+
    2023-06-12
    Win7 剪贴板 开启 贴板 方法
  • centos进程查看的方法有哪些
    在CentOS中,有多种方法可以查看进程。以下是一些常用的方法:1. 使用ps命令:可以通过ps命令查看当前正在运行的进程。常见的用...
    99+
    2023-09-11
    centos
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作