Получение «NotImplementedError: невозможно определить количество процессоров» при слишком частом запуске с многопроцессорной библиотекой в ​​Python 2.7 - PullRequest
0 голосов
/ 11 октября 2019

У меня довольно большой процесс, который делает много одновременно, и чем больше он может сделать одновременно, тем быстрее он работает с очень высоким потолком.

Я могу ограничить сегменты для того, сколько процессов может запускаться одновременно, но в зависимости от настроек, которые я передаю, 3 может работать одновременно без проблем, но с другими настройками 50 может работать одновременно. Если я пытаюсь запустить 50 одновременно, я думаю, что это увеличивает мою локальную вычислительную мощность и просто терпит неудачу с ошибкой «NotImplementedError: не может определить число процессоров».

Это противоречиво и варьируется в зависимости от большого количества факторов, которые невозможно определить до запуска. Имея это в виду, мне любопытно узнать, есть ли способ просто «успокоить» участника процесса и продолжить попытки, если он не сможет что-то обработать.

Вот полная трассировка стека:

Error
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 331, in run
    testMethod()
  File "/.../files/default/my_deployment/my_test_suite.py", line 255, in test_main_run
    self.assertTrue(main.main(self.settings))
  File "/.../files/default/my_deployment/main.py", line 60, in main
    results = pool.map(connector.main, list)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 567, in get
    raise self._value
NotImplementedError: cannot determine number of cpus

И базовая настройка моей карты threadPool выглядит следующим образом:

        with closing(ThreadPool(processes=settings.run_bucket)) as pool:
            results = pool.map(connector.main, list)
            pool.terminate()

        successful_connections += sum(results)

Это вызывает основной процесс, который оченьно для больших наборов данных я обычно могу успешно разбить его на группы по 5, а на небольших наборах данных я могу установить для run_bucket значение выше 20 без сбоев.

...