我对Python还比较新,所以如果这是一个愚蠢的问题,我想道歉。
我目前正在开发中执行多项数据检查。
简而言之,我有一个主数据框需要与其他一些数据框进行验证。
我的代码在单核上运行良好,但由于数据量大,我需要实现多核处理。问题在于我找不到如何将多个Pandas数据框作为参数传递给函数模块。
请注意,主数据集“purchase_orders”已经在进程之间拆分,因此每个进程将接收到1/4的数据。其他数据框应该更小,而且完全相同,因此如果有办法让生成的进程访问主进程创建的数据框,那么也可以,因为我只会从它们读取数据。
数据框“change_log”和“parameters”将在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'
有人知道在启动多进程时如何将三个pandas数据框传递给函数模块吗?
更新:我尝试了更多的测试,使用multiprocessing.pool.starmap而不是map,但我收到相同的错误消息。 我也尝试使用partial,但它也不起作用,因为我至少需要使用3个参数,据我所知,'partial'仅适用于2个参数。
如果有任何其他关于数据框的想法,我将非常感激。
提前感谢您的帮助。
比尔