系统相关
首页 > 系统相关> > tornado多进程模式问题【未实践】

tornado多进程模式问题【未实践】

作者:互联网


昨天尝试使用tornado的多进程运行模式,但是报错了,如下:

RuntimeError: Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start_processes()


一开始通过网上搜索了解,可能原因是在application创建时参数debug设置为了True,或者autoreload设置为True,但是我都设置为False还是不行,最后在stackoverflow上面看的一篇相关的问题贴(地址:run-multiple-tornado-processess),从中发现一个大佬的话,他提到了其他可能的原因,原文是:

https://stackoverflow.com/questions/32521122/cannot-run-in-multiple-processes-ioloop-instance-has-already-been-initialized

其中包括我自己使用的AsyncHTTPClient客户端,我是在自己的RequestHandler类中作为类属性初始化的,这样在server.start()的时候这个客户端也初始化了,按照上面大佬的说法也会导致事件循环初始化,以致于后面说IOLoop已经初始化的报错提示。所以后面我将初始化放在了RequestHandler类的initialize方法里面时就可以了,但是我想是不是这个方法会在每次有请求过来的时候都会初始化一次,这样不是很操蛋的事吗,所以我直接在server.start()之后直接赋值给RequestHandler类属性方式来实现,这样只需要初始化一次就好了。
————————————————
版权声明:本文为CSDN博主「任心生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011480097/article/details/89178782

Lucky@Dong 发布了130 篇原创文章 · 获赞 29 · 访问量 1万+ 私信 关注

标签:IOLoop,初始化,processes,run,start,tornado,实践,instance,进程
来源: https://blog.csdn.net/zzddada/article/details/104009384