multiprocessing.Pool: экземпляры классов и ошибки pickle - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь запустить какой-нибудь скрипт на 10 подключенных платах (параллельный лимит процесса 4 для стабильности).Я столкнулся со следующей ошибкой, и вот фрагмент кода.Я полагаю, что это связано с экземпляром класса, но каждый объект класса является независимым, и ни один из ресурсов не является общим (или не возвращенным)

TypeError: can't pickle thread.lock objects

Код:

def update_device_worker(worker):
    worker.run()

class Worker :
    def __init__(self, device):
        self.device = device

    def run(self):
       << bash code to run on IoT devices to cleanup and restart>>

pool = multiprocessing.Pool(processes=4, maxtasksperchild=1)
workers = [Worker(d) for d in connected_IoT_Devices]
pool.map(update_device_worker, workers)

class Device(object):
    def __init__(self, device):
        self.device = device
        self.ipaddress,  self.serial, self.model, self.log, 
            = None, None, None, None
        self.log = os.path.join(logPath,self.serial+ ".log")
        custom_logger(self.log)
        self.logger = logging.getLogger(self.log)
        self.logger.info("Logger started for %s ", self.serial)
...