我启动了龙卷风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个子进程,并创建了一个调度程序,我希望调度程序只运行一次但不能在每个进程中运行。我可以做什么?
答案 0 :(得分:1)
您必须使用"advanced multi-process"模式而不是HTTPServer.start()
。 fork_processes()
会返回一个任务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()