Python 如何使用嵌套池将所有CPU与pathos一起使用
回答有关用于多处理的嵌套池的问题:Python 如何使用嵌套池将所有CPU与pathos一起使用,python,parallel-processing,python-multiprocessing,pathos,Python,Parallel Processing,Python Multiprocessing,Pathos,回答有关用于多处理的嵌套池的问题: import pathos import multiprocess class NoDaemonProcess(multiprocess.Process): """NoDaemonProcess class. Inherit from :class:`multiprocessing.Process`. ``daemon`` attribute always returns False. """ def _ge
import pathos
import multiprocess
class NoDaemonProcess(multiprocess.Process):
"""NoDaemonProcess class.
Inherit from :class:`multiprocessing.Process`.
``daemon`` attribute always returns False.
"""
def _get_daemon(self):
return False
def _set_daemon(self, value):
pass
daemon = property(_get_daemon, _set_daemon)
class NestedPool(pathos.multiprocessing.Pool):
"""NestedPool class.
Inherit from :class:`pathos.multiprocessing.Pool`.
Enable nested process pool.
"""
Process = NoDaemonProcess
我提出的代码没有按照我想要的方式响应。也就是说,如果ThreadingPool(8)
和ProcessingPool(3)
,我希望进程的数量是24个,但我只得到了3个!所以我继续使用它,通过将守护进程标志设置为False,它允许嵌套进程池。这很好,但是:
pathos
,而不是简单的多处理:
import pathos
import multiprocess
class NoDaemonProcess(multiprocess.Process):
"""NoDaemonProcess class.
Inherit from :class:`multiprocessing.Process`.
``daemon`` attribute always returns False.
"""
def _get_daemon(self):
return False
def _set_daemon(self, value):
pass
daemon = property(_get_daemon, _set_daemon)
class NestedPool(pathos.multiprocessing.Pool):
"""NestedPool class.
Inherit from :class:`pathos.multiprocessing.Pool`.
Enable nested process pool.
"""
Process = NoDaemonProcess
如果您想使用此功能,请务必小心,您必须终止内部池,否则将导致僵尸:
import NestedPool
def triple(x):
return 3*x
def refork(x):
pool = NestedPool(3)
result = pool.imap(triple, range(5))
result = list(result)
pool.terminate()
return result
pool = NestedPool(8)
result = pool.imap(refork, range(3))