У меня есть скрипт, в котором я запускаю некоторые процессы с помощью pool.apply_async и запускаю их как недемон, чтобы избежать проблем, связанных с процессами «зомби», перегружающими память.До сих пор это работало хорошо, за исключением того, что теперь я увеличил набор данных в памяти, поэтому, используя все свои ядра, я увеличиваю объем памяти.Я хочу ограничить количество ядер, используемых в этих случаях, но не могу заставить его работать
Обычно я бы интегрировал что-то вроде следующего
pool = Pool(self.nb_cores)
, чтобы ограничить количество ядер,Однако я не могу выяснить, где его интегрировать в процесс, отличный от процесса.
import multiprocessing
import multiprocessing.pool
class NoDaemonProcess(multiprocessing.Process):
"""
Extends the multiprocessing Process class to disable
the daemonic property. Polling the daemonic property
will always return False and cannot be set.
"""
@property
def daemon(self):
"""
Always return False
"""
return False
@daemon.setter
def daemon(self, value):
"""
Pass over the property setter
:param bool value: Ignored setting
"""
pass
class NoDaemonContext(type(multiprocessing.get_context())):
"""
With the new multiprocessing module, everything is based
on contexts after the overhaul. This extends the base
context so that we set all Processes to NoDaemonProcesses
"""
Process = NoDaemonProcess
class NoDaemonPool(multiprocessing.pool.Pool):
"""
This extends the normal multiprocessing Pool class so that
all spawned child processes are non-daemonic, allowing them
to spawn their own children processes.
"""
def __init__(self, *args, **kwargs):
kwargs['context'] = NoDaemonContext()
super(NoDaemonPool, self).__init__(*args, **kwargs)
Я знаю, что мне нужно где-то интегрировать ограничение количества ядер ... просто не могу найтиТочная функция мне нужна в моем контексте.