17-向线程的目标函数传递参数
17.6.1 向线程的目标函数传递参数
如果想让在新线程中运行的目标函数有参数,那么可以将目标函数的参数传入 threading. Thread()
。例如,假设想在自己的线程中运行以下 print()
调用:
>>> print('Cats', 'Dogs', 'Frogs', sep=' & ')
Cats & Dogs & Frogs
该 print()
调用有3个常规参数: 'Cats'
、 'Dogs'
和 'Frogs'
。还有一个关键字参数: sep=' & '
。常规参数可以作为一个列表,传递给 threading.Thread()
中的 args
关键字参数。关键字参数可以作为一个字典,传递给 threading.Thread()
中的 kwargs
关键字参数。
在交互式环境中输入以下代码:
>>> import threading
>>> threadObj = threading.Thread(target=print, args=['Cats', 'Dogs', 'Frogs'],
kwargs={'sep': ' & '})
>>> threadObj.start()
Cats & Dogs & Frogs
为了确保参数 'Cats'
、 'Dogs'
和 'Frogs'
传递给新线程中的 print()
,我们将 args=['Cats', 'Dogs', 'Frogs']
传入 threading.Thread()
。为了确保关键字参数 sep=' & '
传递给新线程中的 print()
,我们将 kwargs={'sep': '& '}
传入 threading.Thread()
。
threadObj.start()
调用将创建一个新线程来调用 print()
函数,它会传入 'Cats'
、 'Dogs'
和 'Frogs'
作为参数,并传入 ' & '
作为 sep
关键字参数。
下面所列的创建新线程调用 print()
的方法是不正确的:
threadObj = threading.Thread(target=print('Cats', 'Dogs', 'Frogs', sep=' & '))
这行代码最终会调用 print()
函数,并将它的返回值( print()
的返回值总是 None
)作为 target
关键字参数。它没有传递 print()
函数本身。如果要向新线程中的函数传递参数,就要使用 threading.Thread()
函数的 args
和 kwargs
关键字参数。