Я пытаюсь настроить многопроцессорный пул на основе каждой компании.При этом для каждой компании пул потоков должен запускаться параллельно.
Я использовал 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' не определено
Обращаясь за помощью в этом отношении, также возможно ли вращать несколько потоков в многопроцессорном пуле?
Спасибо, Шахид