繁体   English   中英

线程在python2.7上工作正常,但在python3.4上却无法正常工作

[英]Threading is working perfectly on python2.7 but not on python3.4

import threading
class MyThread(threading.Thread):
    def __init__(self, target, *args):
        self._des = target
        self._args = args
        threading.Thread.__init__(self,)
        self._stopper = threading.Event()    

    def run(self):
        self._des(*self._args)

    def stop(self):
        self._stopper.set()

    def stopped(self):
        return self._stopper.isSet()
def add(a,b):
    print(a+b)
if __name__ == "__main__":
    f1 = MyThread(add,1,2)
    f1.start()
    f1.join()

上面的代码在python2.7上运行完美,但是当我在3.4上尝试它时显​​示以下错误

TypeError: add() missing 2 required positional arguments: 'a' and 'b'

有谁可以帮助我解决这个问题? 提前致谢。

在分配self.args = args ,您将获得作为元组的值,因此您应该首先将其解析为元组,然后将其传递给add函数。 因此,您要做的就是从args创建一个元组。

下面是修改后的代码,其中标记行已更改。

import threading
class MyThread(threading.Thread):
    def __init__(self, target, *args):
        self._des = target
        self.args = tuple(args)  // making it to tuple
        threading.Thread.__init__(self,)
        self._stopper = threading.Event()    

    def run(self):
        self._des(*self.args)

    def stop(self):
        self._stopper.set()

    def stopped(self):
        return self._stopper.isSet()
def add(a,b):
    print(a+b)
if __name__ == "__main__":
    f1 = MyThread(add, 1, 2)
    f1.start()
    f1.join()

希望这可以帮助。

为了简单起见,这一作品

def __init__(self, target, a,b):
    self._des = target
    self._a=a
    self._b=b  
    threading.Thread.__init__(self)
    self._stopper = threading.Event()    

def run(self):
    self._des(self._a,self._b)

顺便说一句,您需要先运行初始化,因为这样会清除所有值,如下所示

def __init__(self, target, *args):
    threading.Thread.__init__(self)
    self._des = target  
    self._args = tuple(args)        
    self._stopper = threading.Event()    

def run(self):
    self._des(self._args[0],self._args[1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM