运行多个Tornado实例使ioloop已经运行错误

Swastik Udupa:

这就是我的代码的样子,(排除了一些与实际无关的细节)

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 is already running出现错误。我认为这是因为正在运行的多个进程正试图访问Tornado的同一实例,因此会看到此错误。我尝试阅读龙卷风的文档,并在网上看到其他资源来尝试解决相同的错误,但是找不到任何有用的信息。

有人可以帮我吗?

Swastik Udupa:

在我更改from multiprocessing.pool import ThreadPool as Poolfrom multiprocessing import Pool

我曾经使用Threadpool作为解决方法,以解决在使用多处理Pool.map()时无法腌制<type'instancemethod'>的错误,但是继续使用这里定义的copy_reg https://laszukdawid.com/2017/ 12/13 / multiprocessing-in-python-all-about-pickling /解决了整个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章