我有一个设置,我使用 Tornado 处理 Web 请求并将任务排队到一堆 Python 进程。这些进程之一是控制进程,而其他进程是工作进程。我想实现一个功能,允许该服务器的计算部分被关闭、重新启动等等。当 Tornado 作为单个进程运行时,这非常有效。但是,当使用多个服务器进程时,即:
server = tornado.httpserver.HTTPServer(app)
server.bind(8888)
server.start(2)
tornado.ioloop.IOLoop.instance().start()
这会产生三个进程(一个控件和两个处理程序)。当我决定停止计算进程时,我得到一个错误:
AssertionError: can only join a child process
我将其解释为 Tornado 处理程序进程试图停止计算进程,但 Tornado 控制一个是它们的父进程。
我正在考虑使用管道,以便我可以向控制计算进程发送停止消息,但是再次出现的问题是,管道端点是否可以在 2 个处理程序进程之间共享?
作为第二个问题,我的方法/架构是否完全错误,什么是正确的方法/架构?