这就是我的代码的样子,(排除了一些与实际无关的细节)
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的同一实例,因此会看到此错误。我尝试阅读龙卷风的文档,并在网上看到其他资源来尝试解决相同的错误,但是找不到任何有用的信息。
有人可以帮我吗?
在我更改from multiprocessing.pool import ThreadPool as Pool
为from multiprocessing import Pool
我曾经使用Threadpool作为解决方法,以解决在使用多处理Pool.map()时无法腌制<type'instancemethod'>的错误,但是继续使用这里定义的copy_reg https://laszukdawid.com/2017/ 12/13 / multiprocessing-in-python-all-about-pickling /解决了整个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句