web-dev-qa-db-ja.com

Python threading.Threadでキーワード引数をターゲット関数に渡します

Threadオブジェクトを作成しながら、名前付き引数をターゲット関数に渡したいです。

以下は私が書いたコードです。

import threading

def f(x=None, y=None):
    print x,y

t = threading.Thread(target=f, args=(x=1,y=2,))
t.start()

6行目で「x = 1」の構文エラーが発生しました。ターゲット関数にキーワード引数を渡す方法を知りたいです。

31
xennygrimmato
t = threading.Thread(target=f, kwargs={'x': 1,'y': 2})

これにより、キーワード引数の名前をキーとして、引数値を辞書の値として持つ辞書が渡されます。 「x」と「y」はそのスコープでは未定義であるため、上記の他の答えは機能しません。

別の例、今回はマルチプロセッシングで、位置引数とキーワード引数の両方を渡します:

使用される関数は次のとおりです。

def f(x, y, kw1=10, kw2='1'):
    pass

そして、マルチプロセッシングを使用して呼び出された場合:

p = multiprocessing.Process(target=f, args=('a1', 2,), kwargs={'kw1': 1, 'kw2': '2'})
53
vladosaurus

また、辞書をそのままkwargsに渡すこともできます。

import threading

def f(x=None, y=None):
    print x,y

my_dict = {'x':1, 'y':2}
t = threading.Thread(target=f, kwargs=my_dict)
t.start()
6
Daniel

argskwargs={x: 1, y: 2}に置き換えてみてください。

1
f43d65