代码大致如下:
class MainHandler(RequestHandler): def get(self): ... ... def update(): ... ... IOLoop.instance().add_timeout(time.time() + 3600, update) if __name__ == '__main__': application = tornado.web.Application([ .... ]) server = HTTPServer(application) server.start(2) # 开启两个进程 IOLoop.instance().add_timeout(time.time() + 3600, update) # 耗时的定时update ... ...
其中update()是一个特别耗时的任务
目前的做法是加大add_timeout的时间间隔,以避免两个进程全都去做update了
因为对异步编程并不熟,所以想请教一下有没有更合适的做法
听起来这个任务会占用主线程很久而且不确定具体耗时,那么用协程显然不合适。建议试试ThreadPoolExecutor,然后用yield threadPool.submit(fn)