【问题标题】:Passing multiple arguments in Python thread在 Python 线程中传递多个参数
【发布时间】:2017-03-27 16:06:58
【问题描述】:

以下代码传递了一个列表(varbinds),它工作正常。

t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds,))

现在我需要传递另一个变量 - vString

请帮忙写一个简单的代码。

【问题讨论】:

  • 你有什么尝试吗?
  • t1 = threading.Thread(target = Main2_TrapToTxtDb, args = (varBinds,)).... 我所知道的。谷歌搜索出现了 kwargs,似乎很难掌握。
  • args = (varBinds,vString)
  • thanx,如果 varbinds 是一个列表,那么语法是什么 - args = ((varBinds),vString) ??

标签: python multithreading arguments


【解决方案1】:

args 参数是一个元组,允许您将许多参数传递给目标。

t1 = threading.Thread(target=Main2_TrapToTxtDb, args=(varBinds, otherVariable))

这是记录在here

threading.Thread(group=None, target=None, name=None, args=(), kwargs={})

应该始终使用关键字参数调用此构造函数。参数是:

组应该是无;为实现 ThreadGroup 类时的未来扩展保留。

target 是由 run() 方法调用的可调用对象。默认为 None,表示不调用任何内容。

name 是线程名称。默认情况下,唯一的名称以“Thread-N”的形式构造,其中 N 是一个小十进制数。

args 是目标调用的参数元组。默认为 ()。

kwargs 是目标调用的关键字参数字典。默认为 {}。

【讨论】:

  • 感谢您的解释。但是 varbinds 是一个列表。所以括号内变量后面的逗号...(varBinds,)。那么在列表变量之后添加其他变量的语法是什么。我感到困惑。
  • @Manmathan 我认为您不确定自己在做什么。 varBinds 是一个列表,所以呢?它是参数列表吗?它是一个类型为list 的参数吗?你想传递一个包含vString 的参数列表吗?如果是这样,只需将其附加到varBinds
  • @Manmathan 我认为您添加了逗号是因为您遇到了错误并注意到逗号让您摆脱了它。 args参数接收一个tuple,但是当你只有一个参数时,你不能写(argument),因为这被解析为argument,它不是一个元组。因此,你必须放一个逗号,所以它被解释为一个元组:(argument, )。由于此元组旨在包含您传递给线程函数的参数,因此只需将所有参数放入元组中,正如我在答案中所写:(arg1, arg2, arg3, arg4)
  • @Manmathan 看来您的列表实际上是list 类型的参数。因此,只需编写(再次,正如我在回答中所写):args=(varBinds, vString)(顺便说一句,这里的逗号是可选的,因为元组中有两个元素,所以 Python 明确地解释了这一点)。
  • @Manmathan 不客气,但下次请考虑文档;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多