Где мне следует выделить пул в многопроцессорной обработке Python?Python

Программы на Python
Anonymous
Где мне следует выделить пул в многопроцессорной обработке Python?

Сообщение Anonymous »

Я хочу распространить приложение Python на несколько ядер, и из документации я понимаю, что для этого можно использовать пул.
Мою проблему можно воспроизвести с помощью следующего кода:

Код: Выделить всё

#!/usr/bin/python3
import multiprocessing as mp
import multiprocessing.managers
import time

def poolswimmer():
for i in range(5):
print(i)
time.sleep(1)

def poolprocess(_pool):
res = _pool.apply_async(poolswimmer)
res.wait()

if __name__ == "__main__":
mp.freeze_support()
mpc = mp.get_context('spawn')
manager = mpc.Manager()
pool = manager.Pool()
p = mp.Process(target=poolprocess, args=(pool,))
p.start()
p.join()
pool.close()
— это часть с интенсивным вводом-выводом, а — это часть задания с интенсивным использованием ЦП, которая выполняется в циклах для различных периферийных устройств.
Я получаю следующую ошибку:

Код: Выделить всё

Process Process-2:
Traceback (most recent call last):
File "/usr/lib/python3.12/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/usr/lib/python3.12/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/home/dad/sandbox/ImageProcessing/poolrider.py", line 12, in poolprocess
res = _pool.apply_async(poolswimmer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in apply_async
File "/usr/lib/python3.12/multiprocessing/managers.py", line 827, in _callmethod
proxytype = self._manager._registry[token.typeid][-1]
^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute '_registry'
Инспектор объектов сообщает мне, что моя переменная пула является экземпляром объекта PoolProxy, поэтому ее можно вызвать из процесса.
Где я ошибаюсь?
Есть ли лучший способ добиться того, что я пытаюсь сделать?


Подробнее здесь: https://stackoverflow.com/questions/797 ... processing

Вернуться в «Python»