如何在龙卷风tcpserver多处理模式下的每个进程中防止ioloop.PeriodicCallback 运行?

How to prevent ioloop.PeriodicCallback run in every process in tornado tcpserver multiprocessing mode?

我像这样启动一个龙卷风 tcpserver:

def main():
    server = Server()
    server.bind(8989)
    server.start(9)  # **Forks multiple sub-processes**
    io_loop = tornado.ioloop.IOLoop.instance()
    check_time = 1 * 1000  # every second
    scheduler = ioloop.PeriodicCallback(app.periodic_job,
                                    check_time,
                                    io_loop=io_loop)
    scheduler.start()
    io_loop.start()

我分叉了9个子进程,并创建了一个调度器,我希望调度器只运行一次,而不是每个process.how都运行,我可以吗?

您必须使用 "advanced multi-process" 模式而不是 HTTPServer.start()fork_processes() returns一个任务ID,所以你可以运行只在某个任务中PeriodicCallback

def main():
    sockets = tornado.netutil.bind_sockets(8989)
    task_id = tornado.process.fork_processes(9)
    server = Server()
    server.add_sockets(sockets)
    io_loop = tornado.ioloop.IOLoop.instance()
    if task_id == 0:
        check_time = 1 * 1000  # every second
        scheduler = ioloop.PeriodicCallback(app.periodic_job,
                                check_time,
                                io_loop=io_loop)
        scheduler.start()
    io_loop.start()