当前位置:嗨网首页>书籍在线阅读

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() 函数的 argskwargs 关键字参数。