Невозможно создать пул потоков с многопроцессорным пулом - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь настроить многопроцессорный пул на основе каждой компании.При этом для каждой компании пул потоков должен запускаться параллельно.

Я использовал pathos.multiprocessing для создания многопроцессорного пула, где в нем вызывается отдельная функция, которая пытается запустить пул потоков.Здесь ThrdPool - это пользовательский класс, который доступен локально в папке с файлом основного класса, а также импортируется в основной класс.Когда я пытаюсь вызвать этот класс в соответствующей функции, я получаю сообщение об ошибке «Thrdpool не определен».

Я перепробовал все типы импорта, такие как импорт ThrdPool из ThrdPool, импорт ThrdPool из ThrdPool import *, я даже переименовалфайл, от ThreadPool до ThrdPool, но все равно не повезло.Я могу запустить ThrdPool.py, добавив метод main без каких-либо проблем.

from pathos import multiprocessing as multiprocessing
from functools import partial
from ThrdPool import *

class APICall():
     def __init__(self):
     self.host = config.get('splunk_search_section', 'host_name')
     self.port = config.get('splunk_search_section', 'host_port')
     self.username = config.get('splunk_search_section', 'user_name')
     self.password = config.get('splunk_search_section', 'password')
 def process(self):
     company_list = self.fetch_onboarded_companies_from_customer_csv()
     saved_search_list_file = os.path.join(code_dir_path, "resources\\saved_search_template.txt")
     try:
         with open(saved_search_list_file, "r") as ss_file_pointer:
             saved_search_list = ss_file_pointer.readlines()
     except IOError as ie:
         self.logging.error(f"Error occurred while accessing the Saved Search file reason being , {ie}")
         raise IOError("IO Error occurred while accessing the Saved Search file.")
     finally:
         ss_file_pointer.close()
     # Creating a process pool for each company key, to increase the throughput.
     # Assuming 4 processors to be max optimistically.
     p = multiprocessing.Pool(processes=4)
     # for each_cpy in company_list:
     list_length_company = len(company_list)
     array_of_numbers = [x for x in range(0, list_length_company)]
     ssl = saved_search_list
     cl = company_list
     func = partial(self.processing_saved_search_per_company, ssl, cl)
     p.map(func, array_of_numbers)
     p.close()
     p.join()
 def processing_saved_search_per_company(self, saved_search_list, company_list, each_cpy_index):
     company_key = company_list[each_cpy_index]
     print("Company Key : " + company_key)
     self.logging.info(f"processing the saved search for company {company_key}")
     each_cpy = company_list[each_cpy_index]
     array_of_numbers = [x for x in range(0, len(saved_search_list))]
     # Creating a Thread pool of 5 threads to optimistically increase the throughput of saved search processing.
     thread_pool = ThrdPool(5)
     function1 = partial(self.run_saved_search_per_company, saved_search_list, each_cpy)
     thread_pool.map(function1, array_of_numbers)
     thread_pool.wait_completion()

Ожидается создание пула потоков, но импорт пула потоков не выполняется.Даже если я прокомментирую пул потоков, произойдет сбой следующей строки партиала с приведенной ниже ошибкой.

Traceback (последний вызов был последним): Файл "C: / Users / sp / src /APICall.py ", строка 176, в файле APICall (). Process ()." C: /Users/sp/APICall.py ", строка 92, в процессе. Ключ компании: 105261 файл p.map (func, array_of_numbers), файл" C: \ Users \ xxxxx \ AppData \ Roaming \ Python \ Python37 \ site-> packages \ multiprocess \ pool.py ", строка 268, в карте возвращает self._map_async (func, iterable, mapstar, chunksize) .get () File")C: \ Users \ xxxxxx \ AppData \ Roaming \ Python \ Python37 \ site-packages \ multiprocess \ pool.py ", строка 657, в get get self._value NameError: имя 'ThrdPool' не определено

Обращаясь за помощью в этом отношении, также возможно ли вращать несколько потоков в многопроцессорном пуле?

Спасибо, Шахид

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...