如何在龙卷风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()
我像这样启动一个龙卷风 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()