这是我的代码样式,(已省略一些不太相关的细节)。
当我运行它时,出现“ioloop已在运行”的错误。我认为这是因为运行的多个进程正在尝试访问Tornado的同一实例,因此会看到此错误。我尝试阅读了Tornado文档并查看了其他在线资源以尝试解决相同的错误,但找不到任何有用的信息。能否有人帮助我解决问题?
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)
当我运行它时,出现“ioloop已在运行”的错误。我认为这是因为运行的多个进程正在尝试访问Tornado的同一实例,因此会看到此错误。我尝试阅读了Tornado文档并查看了其他在线资源以尝试解决相同的错误,但找不到任何有用的信息。能否有人帮助我解决问题?
run_sync
。这就是导致错误的原因。要么在所有地方使用协程和yield
,要么在所有地方使用回调函数。通过混合这两种方法,你会不必要地使代码变得复杂。 - xyres