Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行多个Tornado实例会导致ioloop已在运行错误_Python_Multiprocessing_Tornado_Python Multiprocessing_Ioloop - Fatal编程技术网

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)