gpt4 book ai didi

python - 与 pathos.multiprocessing 并行安全地写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:29 25 4
gpt4 key购买 nike

众所周知,

pathos.multiprocessing 优于 Python 中的 multiprocessing 库,因为前者使用 dill 而不是 pickle 并且可以序列化更广泛的功能和其他东西。

但是当使用 pathospool.map() 结果写入文件时,就会出现一些麻烦。如果 ProcessPool 中的所有进程都按行将结果写入单个文件,它们会相互干扰同时写入一些行并破坏工作。在使用普通的 multiprocessing 包时,我能够让进程写入它们自己的单独文件,以当前进程 ID 命名,如下所示:

example_data = range(100)
def process_point(point):
output = "output-%d.gz" % mpp.current_process().pid
with gzip.open(output, "a+") as fout:
fout.write('%d\n' % point**2)

然后,这段代码运行良好:

import multiprocessing as mpp
pool = mpp.Pool(8)
pool.map(process_point, example_data)

但是这段代码没有:

from pathos import multiprocessing as mpp
pool = mpp.Pool(8)
pool.map(process_point, example_data)

并抛出AttributeError:

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-10-a6fb174ec9a5> in <module>()
----> 1 pool.map(process_point, example_data)

/usr/local/lib/python2.7/dist-packages/processing-0.52_pathos-py2.7-linux-x86_64.egg/processing/pool.pyc in map(self, func, iterable, chunksize)
128 '''
129 assert self._state == RUN
--> 130 return self.mapAsync(func, iterable, chunksize).get()
131
132 def imap(self, func, iterable, chunksize=1):

/usr/local/lib/python2.7/dist-packages/processing-0.52_pathos-py2.7-linux-x86_64.egg/processing/pool.pyc in get(self, timeout)
371 return self._value
372 else:
--> 373 raise self._value
374
375 def _set(self, i, obj):

AttributeError: 'module' object has no attribute 'current_process'

pathos 中没有current_process(),我也找不到类似的东西。有什么想法吗?

最佳答案

我是 pathos 的作者。虽然您的答案适用于这种情况,但最好在 pathos 中使用 multiprocessing 的分支,它位于相当钝的位置:pathos.helpers.mp.

这为您提供了与 multiprocessing 的一对一映射,但具有更好的序列化。因此,您将使用 pathos.helpers.mp.current_process

抱歉,它既没有记录又不明显……我应该至少改进这两个问题中的一个。

关于python - 与 pathos.multiprocessing 并行安全地写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32568514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com