python - 将参数传递给线程python

标签 python multithreading python-3.x

我的类中有这个方法叫做“交互”:

class Interaction:

    def PreparaThreadBrowser(self, User, Password):
       t = ThreadBrowser(args=(User, Password), )
       t.start()

以 User 和 Pass 作为参数调用一个线程。

然后我有一个名为“ThreadBrowser”的类和这个“run”方法:

class ThreadBrowser(threading.Thread):

    def run (self, user, password):

        self.User = user
        self.Pass = password
        print(self.User, self.Pass)

但事实证明,我确实在努力将参数发送到线程函数,因为它给出了执行错误:

TypeError: run() 缺少 2 个必需的位置参数:'user' 和 'password'

知道如何解决这个问题吗?

最佳答案

args 构造函数参数不能为run 提供额外的参数。它向 target 提供您未指定的参数。具体来说:

  • run() 的默认实现调用 self.target(*self._args, **self._kwargs),其中 _args_kwargs 由构造函数提供,默认分别为空元组和字典。

  • 通过实现 run,您选择退出 Python 自动调用 target(*args)。然后由您的代码来存储您的 run 将拾取的状态。惯用的选项是将其存储在构造函数中,就像您的 run 方法现在所做的那样。

例如:

class ThreadBrowser(threading.Thread):
    def __init__(self, user, password):
        super(ThreadBrowser, self).__init__()
        self.User = user
        self.Pass = password

    def run(self):
        print(self.User, self.Pass)

然后 ThreadBrowser 可以自然地构造为 ThreadBrowser(username, password) 并像以前一样以 t.start() 启动。

关于python - 将参数传递给线程python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235976/

相关文章:

python - 为什么我们必须在深度神经网络中嵌入列,而不是在 tensorflow 的线性分类器中嵌入列?

java - MySQL 选择更新和插入

python - 需要根据数据框中的行号应用不同的公式

python-3.x - 奇怪的 Pandas 日期切片行为(不切片日期)

python - 提取两个标记之间的所有子字符串

python - random.sample 中使用的常数的证明

python - 向 skflow 添加正则化器

python - 有效地反转和反转 python3.x OrderedDict

c++ - 在分离线程中执行 - 终止进程(c++ std 11)

java - Java中创建新线程有多少种方式?