如果想在新线程中运行的目标函数有参数,可以将目标函数的参数传入
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()的返回值总是无)作为 target 关键字参数。它没有传递 print()函数本身。如果要向新线程中的函数传递参数,就使用
threading.Thread()函数的 args 和 kwargs 关键字参数。