首页 > 解决方案 > 如何解决或报告 pathos 和 pypy 之间的不兼容问题

问题描述

我有一些使用simPy框架编写的模拟代码。要使用不同的参数运行多个模拟,我无法使用标准的 Python多处理模块,因为它不会成功腌制我需要传递给模拟实例的所有参数。我通过切换到 pathos 多处理模块(耶!)解决了这个问题——但是当调用 pathos/starmap 组合时 pypy 解释器崩溃了。

pathos/multiprocessing 池调用是:

with pathos.helpers.mp.Pool() as pool:
   results = pool.starmap(runSim, argsToRun)

argsToRun 是特定于该模拟运行的参数列表。大多数都是无聊的整数或字符串,但一个参数是一个简单的Environment实例,标准 python 无法腌制 - 这最初是驱使我转向悲情的原因。

在这一点上,我不确定这是否会起作用(这意味着是否有人会被激励甚至去看它),如果我清除了那座桥,我不确定是与悲情一方还是 pypy 一方合作. 在 Pypy 而不是 cPython 中运行这些模拟可以使我的性能提高 4 倍到 8 倍,但我也有一台 32 核机器,因此能够运行多处理更加重要。我就是那样贪婪,所以我真的很想让两者一起工作,而且还有其他人会受益似乎并不是很疯狂。;)

Traceback (most recent call last):
  File "/users/lwobker/scripts/pypy/site-packages/multiprocess/process.py", line 258, in _bootstrap
    self.run()
  File "/users/lwobker/scripts/pypy/site-packages/multiprocess/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/users/lwobker/scripts/pypy/site-packages/multiprocess/pool.py", line 108, in worker
    task = get()
  File "/users/lwobker/scripts/pypy/site-packages/multiprocess/queues.py", line 340, in get
    return _ForkingPickler.loads(res)
  File "/users/lwobker/scripts/pypy/site-packages/dill/_dill.py", line 275, in loads
    return load(file, ignore, **kwds)
  File "/users/lwobker/scripts/pypy/site-packages/dill/_dill.py", line 270, in load
    return Unpickler(file, ignore=ignore, **kwds).load()
  File "/users/lwobker/scripts/pypy/site-packages/dill/_dill.py", line 472, in load
    obj = StockUnpickler.load(self)
  File "/users/lwobker/pypy/pypy3.6-7.2.0-linux_x86_64-portable/lib-python/3/pickle.py", line 1070, in load
    dispatch[key[0]](self)
  File "/users/lwobker/pypy/pypy3.6-7.2.0-linux_x86_64-portable/lib-python/3/pickle.py", line 1418, in load_reduce
    stack[-1] = func(*args)
AttributeError: 'Environment' object has no attribute 'Process'

标签: pypydillpathos

解决方案


我同时看到/users/lwobker/scripts/pypy/users/lwobker/pypy/pypy3.6-7.2.0-linux_x86_64-portable。他们是否使用相同版本的任何库Environment


推荐阅读