Многопроцессорный пул не принимает список строк для создания отдельного процесса - PullRequest
0 голосов
/ 25 мая 2019

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

У меня есть функция, которая берет 3 аргумента, из которых 1 самои второй - список, а третий - балансовая единица.Я пытаюсь обработать функцию как процесс для каждой балансовой единицы.У меня изначально была проблема с переменной self, которая выдает ошибку 'pickle', которую я сейчас преодолеваю, передав None.Я использовал 'Partial' для проблемы с несколькими аргументами в многопроцессорной обработке, после чего я получаю сообщение об ошибке "TypeError: могу объединить str (не" list ") в str" при добавлении company_list как итеративного к моей карте.

def processing_saved_search_per_company(self, saved_search_list, each_cpy):
    print("Company Key : " + each_cpy)
    print("Saved Search List : " + saved_search_list)

def process(self):
        saved_search_list =[]
        company_list = APICall.fetch_onboarded_companies_from_customer_csv(self)
        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:
            print(f"Error Occurred while accessing the Saved Search file reason being :-: {ie}")

        final_ss_list = []
        p=Pool(processes=4)

        #for each_cpy in company_list:
        print("Company List : "+str(company_list))

        func = partial(APICall.processing_saved_search_per_company,None,saved_search_list)
        p.map(func, company_list)
        p.close()

Мне нужно создать пул процессов, который работает следующим образом:

p1 = processing_saved_search_per_company (self, save_search_list, "company 1")

p2 = processing_saved_search_per_company (self ,ved_search_list, "company 2")

p3 = processing_saved_search_per_company (self, save_search_list, "company 3")

, но с ошибкой:

TypeError: может объединять только str (не "список") на стр

Запрос помощи по этому вопросу.

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

1 Ответ

0 голосов
/ 26 мая 2019

Нашел обходной путь для этой проблемы, например, передав список компаний, а также часть частичной функции, а затем массив чисел в длину списка компаний в мою функцию ниже, которая теперь будет принимать индекс в качестве нового параметра вконец.

processing_saved_search_per_company (self, save_search_list, companies_list, index):

Теперь, когда индекс идет по карте ниже, я могу запустить вышеуказанную функциюдля конкретной компании, без каких-либо хлопот.

func = частичный (APICall.processing_saved_search_per_company, нет, сохраненный_поиск_list, company_list) Index_values ​​= [X для X в диапазоне (0, len (companies_list))]] p.map (func, index_values) p.close () p.join ()

Спасибо

...