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」の構文エラーが発生しました。ターゲット関数にキーワード引数を渡す方法を知りたいです。
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'})
また、辞書をそのまま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()
args
をkwargs={x: 1, y: 2}
に置き換えてみてください。