У меня есть класс DataProcessor, который содержит экземпляр средства регистрации. Я хочу создать несколько экземпляров этого класса и обрабатывать их параллельно с помощью multiprocessing.Pool.
Код: Выделить всё
import logging
import multiprocessing
class DataProcessor:
def __init__(self, name):
self.name = name
self.logger = logging.getLogger("ProcessorLogger")
self.logger.setLevel(logging.INFO)
def run(self, data):
self.logger.info(f"{self.name} is processing {data}")
return data * 2
def worker(obj_and_data):
obj, data = obj_and_data
return obj.run(data)
if __name__ == "__main__":
tasks = [(DataProcessor(f"Proc-{i}"), i) for i in range(5)]
with multiprocessing.Pool(processes=4) as pool:
# This line triggers the error
results = pool.map(worker, tasks)
print(results)
Код: Выделить всё
Traceback (most recent call last):
File "script.py", line 22, in
results = pool.map(worker, tasks)
...
File "/usr/lib/python3.10/multiprocessing/reduction.py", line 51, in dump
ForkingPickler(file, protocol).dump(obj)
TypeError: cannot pickle '_thread.lock' object
AttributeError: Can't pickle _thread.lock objects
- Я пытался сделать регистратор глобальной переменной, но мне нужны разные конфигурации для разных процессоров.
- Я пробовал использовать pathos.multiprocessing, который использует dill, но у меня все равно возникают проблемы с сериализацией или журналы просто не отображаются.