【发布时间】:2018-11-08 15:38:33
【问题描述】:
我目前正在尝试使用 python 多处理。我使用的库是multiprocess(不是multiprocessing)。
我有以下代码,它创建了许多计算作业,并通过映射操作运行它:
pool = multiprocess.Pool(4)
all_responses = pool.map_async(wrapper_singlerun, range(10000))
pool.join()
pool.close()
但是,每当我运行这个 sn-p 代码时,我都会收到以下错误:
pool.join()
File "/Users/davidal/miniconda3/lib/python3.6/site-packages/multiprocess/pool.py", line 509, in join
assert self._state in (CLOSE, TERMINATE)
AssertionError
您知道为什么会发生此错误吗?我之前使用过pool.map_async,但我认为我需要一个pool rendez-vous 命令。否则,我的电脑会创建类似 forkbomb 的东西,它会创建太多线程(至少,我认为它是这样做的......)
感谢任何想法!
【问题讨论】:
-
您的代码是在
if __name__ == '__main__':块中,还是在模块的顶层? -
这段代码被编码在一个类中,在几层函数中实例化。初始函数确实在
if __name__ == "__main__":之内 -
multiprocesshomepage 链接到docs that don't exist。这使得调试任何与multiprocessing不同的东西变得非常困难。但似乎唯一的区别是 (a)multiprocesspre-monkeypatchesdill代替pickle和 (b) 可能落后几个版本。那么……你能用multiprocessing重现同样的问题吗? -
显然我对
multiprocessing有同样的问题(当我用pool = multiprocessing.Pool(4)替换pool = multiprocess.Pool(4)时 -
@abarnert,更具体地说,
multiprocessing模块给了我一个酸洗错误,这就是为什么我切换到另一个库(因为它使用莳萝)
标签: python multiprocessing threadpool python-multiprocessing multiprocess