Давайте посмотрим на две части вашего кода.
Во-первых, объявление функции sumifs
:
def sumifs(df, result_col, **kwargs):
Во-вторых, вызов этой функции с соответствующими параметрами.
# Those are the params
ca = read_in_table('Tab1')
keywords = {'Z': base['Consumer archetype ID']}
# This is the function call
results = pool.map(partial(sumifs, a=ca, kwargs=keywords), tasks)
Обновление 1:
После того, как исходный код был отредактирован. Похоже, что проблема заключается в назначении позиционного аргумента, попробуйте его отбросить.
заменить строку:
results = pool.map(partial(sumifs, a=ca, kwargs=keywords), result_col)
на:
results = pool.map(partial(sumifs, ca, **keywords), result_col)
Пример кода:
import multiprocessing
from functools import partial
def test_func(arg1, arg2, **kwargs):
print(arg1)
print(arg2)
print(kwargs)
return arg2
if __name__ == '__main__':
list_of_args2 = [1, 2, 3]
just_a_dict = {'key1': 'Some value'}
with multiprocessing.Pool(processes=3) as pool:
results = pool.map(partial(test_func, 'This is arg1', **just_a_dict), list_of_args2)
print(results)
Будет выводить:
This is arg1
1
{'key1': 'Some value'}
This is arg1
2
{'key1': 'Some value'}
This is arg1
2
{'key1': 'Some value'}
['1', '2', '3']
Еще один пример того, как Multiprocessing.pool с функцией, которая имеет несколько аргументов и kwargs
Обновление 2:
Расширенный пример (из-за к комментариям):
Интересно, однако, тем же образом, если в моей функции было три аргумента и kwargs, и я хотел сохранить arg1, arg3 и kwargs стоимостным, как я мог передать arg2 как список для многопроцессорной обработки? По сути, как я буду указывать многопроцессорную обработку этой карты (частичная (test_fun c, 'Это arg1', 'Это будет arg3', ** just_a_dict), arg2) второе значение частично соответствует arg3, а не arg2?
Код Обновление 1 мог бы измениться следующим образом:
# The function signature
def test_func(arg1, arg2, arg3, **kwargs):
# The map call
pool.map(partial(test_func, 'This is arg1', arg3='This is arg3', **just_a_dict), list_of_args2)
Это можно сделать с помощью позиционного и ключевого назначения python . Обратите внимание, что kwargs
оставлен в стороне и не назначен с использованием ключевого слова , несмотря на тот факт, что он расположен после назначенного значения ключевого слова .
Дополнительная информация о назначении аргумента различия можно найти здесь .