Python 运行多个Tornado实例会导致ioloop已在运行错误
这就是我的代码的样子(排除了一些不相关的细节) 当我运行此命令时,我得到Python 运行多个Tornado实例会导致ioloop已在运行错误,python,multiprocessing,tornado,python-multiprocessing,ioloop,Python,Multiprocessing,Tornado,Python Multiprocessing,Ioloop,这就是我的代码的样子(排除了一些不相关的细节) 当我运行此命令时,我得到ioloop已经在运行了error。 我觉得这是因为几个正在运行的进程试图访问Tornado的同一个实例,所以出现了这个错误。 我曾经阅读过《龙卷风》的文档,并在网上看到其他资源试图解决同样的错误,但没有找到任何有用的东西 谁能帮帮我吗 在我换了衣服后,这就奏效了 从多处理.pool导入线程池作为池到从多处理导入池 我曾使用线程池作为修复此错误的解决方法,但后来使用此处定义的copy_reg来解决整个问题。在运行循环中不能调
ioloop已经在运行了error。
我觉得这是因为几个正在运行的进程试图访问Tornado的同一个实例,所以出现了这个错误。
我曾经阅读过《龙卷风》的文档,并在网上看到其他资源试图解决同样的错误,但没有找到任何有用的东西
谁能帮帮我吗 在我换了衣服后,这就奏效了
从多处理.pool导入线程池作为池
到从多处理导入池
我曾使用线程池作为修复此错误的解决方法,但后来使用此处定义的copy_reg来解决整个问题。在运行循环中不能调用run_sync
。这就是导致错误的原因。可以在任何地方使用coutroutines和yield
,也可以在任何地方使用回调。混合使用这两种方法会使代码变得不必要的复杂。不过,在循环中使用run_sync在我不进行多处理的情况下是有效的。我要试试这个。
from multiprocessing.pool import ThreadPool as Pool
class GetUsers(BaseTask):
def foo(self):
pool = Pool()
try:
pool.map(self.bar, users)
finally:
pool.close()
pool.join()
def bar(self, users):
uuid = users[0]
ioloopInstance = ioloop.IOLoop().instance()
isInExperiment = self.isInExperiment(uuid, ioloopInstance)
log.info(str(uuid)+str(isInExperiment))
def isInExperiment(self, uuid, ioloop):
isInExpTag_response =ioloop.run_sync(lambda: self.
fetch_isInExperiment_response(uuid))
if len(isInExpTag_response.body) > 0:
return True
return False
@gen.coroutine
def fetch_isInExperiment_response(self, uuid):
response = yield baz
raise gen.Return(response)