Я немного новичок в Python, поэтому я хотел бы извиниться, если это такой глупый вопрос.
В настоящее время я работаю над разработкой для выполнения нескольких проверок данных.
Короче говоря, у меня есть основной фрейм данных, который необходимо будет сравнить с данными некоторых других фреймов данных.
Код, который я сделал, работает на одном ядре, но из-за тома мне потребуется реализовать многоядерную обработку. Проблема в том, что я не могу найти, как передать несколько кадров данных pandas в качестве аргументов в функциональный модуль.
Обратите внимание, что основной набор данных purchase_orders уже разделен между процессами, поэтому каждый из них получит 1/4 данных. Другие кадры данных должны быть меньше и точно такими же, поэтому, если есть способ сделать так, чтобы порожденный процесс имел доступ к фреймам данных, созданным в основном процессе, было бы хорошо, так как я буду только читать данные из них.
Dataframes change_log и параметры будут использоваться в методе apply.
Код ниже:
# this is the code I would like to call for multi processing
def apply_scores_test(purchase_orders, change_log, parameters):
print('Running multicore')
size = 1
g_first = 'X'
g_results = 'START'
g_temp_lifnr = 'X'
purchase_orders = purchase_orders.apply(calculate_scores, axis=1)
return purchase_orders
# Starting the multi-core processing (locked to 4 process to make it easier to test)
p = multiprocessing.Pool(4)
args = [(g_purchase_orders_1, change_log, parameters), (g_purchase_orders_2, change_log, parameters), (g_purchase_orders_3, change_log, parameters),(g_purchase_orders_4, change_log, parameters),]
res = p.map(apply_scores_test, args)
p.close()
p.join()
Ошибка, которую я сейчас получаю, заключается в том, что функциональный модуль получает только один аргумент, как показано ниже:
TypeError: apply_scores_test() missing 2 required positional arguments:
'change_log' and 'parameters'
Кто-нибудь знает, как я могу передать 3 кадра данных панд функциональному модулю, когда я запускаю многопроцессорную работу?
ОБНОВЛЕНИЕ: Я попробовал еще несколько тестов, используя multiprocessing.pool.starmap
вместо map
, и я получаю ту же ошибку.
Я также пытался использовать partial
, но он не работает, так как мне нужно будет использовать хотя бы аргументы, и, насколько я понимаю, «частичный» работает только с 2 аргументами.
У кого-то есть какие-то другие идеи, в частности, с фреймами данных, я был бы очень признателен.
Заранее большое спасибо.
Bill