将参数传递给线程python

时间:2018-07-08 21:03:06

标签: python multithreading python-3.x

我的课堂上有个叫做“互动”的方法:

class Interaction:

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

以“用户”和“通过”为参数的线程。

然后,使用该“运行”方法创建名为“ ThreadBrowser”的类:

class ThreadBrowser(threading.Thread):

    def run (self, user, password):

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

但是事实证明,我确实在将参数发送给线程函数方面很费力,因为它会产生执行错误:

TypeError: run() missing 2 required positional arguments: 'user' and 'password'

有什么办法解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

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

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

  • 通过实现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()开头。

答案 1 :(得分:0)

运行需要2个参数的用户,通过

import threading



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



class ThreadBrowser(threading.Thread):

    def run (self, user, password):
        self.User = user
        self.Pass = password
        print(self.User, self.Pass)



t = ThreadBrowser()
t.run("user", "pass")