Аргументы ключевых слов многопроцессорной обработки Python

Вот простой пример использования аргументов ключевого слова в вызове функции. Ничего особенного.

def foo(arg1,arg2, **args):
    print arg1, arg2
    print (args)
    print args['x']

args ={'x':2, 'y':3}
foo(1,2,**args)

Что печатает, как и ожидалось:

1 2
{'y': 3, 'x': 2}
2

Я пытаюсь передать аргументы ключевого слова того же стиля многопроцессорной задаче, но использование ** в списке аргументов является синтаксической ошибкой. Я знаю, что моя функция stretch() будет принимать два позиционных аргумента и n аргументов ключевого слова.

pool = [multiprocessing.Process(target=stretch, args= (shared_arr,slice(i, i+step),**args)) for i in range (0, y, step)]

Можно ли передать аргументы ключевого слова в multiprocessing.Process? Если да, то как? Если нет, то почему?


person Jzl5325    schedule 18.07.2012    source источник
comment
Вы должны назвать kwargs kwargs, а не args.   -  person kev    schedule 01.08.2016


Ответы (1)


Словарь, который вы используете в качестве аргументов ключевого слова, должен быть передан в качестве параметра kwargs объекту Process.

pool = [multiprocessing.Process(target=stretch, args= (shared_arr,slice(i, i+step)),kwargs=args) for i in range (0, y, step)]
person Andrew Cox    schedule 18.07.2012
comment
Сотрите это. Получил работу, перемещая () также. Спасибо! - person Jzl5325; 18.07.2012