【问题标题】:Python threading override initPython 线程覆盖初始化
【发布时间】:2012-10-22 16:06:34
【问题描述】:

我正在使用 threading.py,我有以下代码:

import threading  
class MyClass(threading.Thread):  
    def __init__(self,par1,par2):
       threading.Thread.__init__(self)  
       self.var1 = par1  
       self.var2 = par2  
    def run(self):
       #do stuff with var1 and var2 while conditions are met
... 
... 
... 
myClassVar = MyClass("something",0.0)

我收到以下错误:

18:48:08    57  S E myClassVar = MyClass("something",0.0)  
18:48:08    58  S E File "C:\Python24\Lib\threading.py", line 378, in `__init__`  
18:48:08    59  S E assert group is None, "group argument must be None for now"  
18:48:08    60  S E AssertionError: group argument must be None for now  

我是python新手,第一次用线程……

这里有什么错误?

谢谢,

乔纳森

【问题讨论】:

    标签: python multithreading class inheritance initialization


    【解决方案1】:

    您不必扩展 Thread 即可使用线程。我通常使用这种模式...

    def worker(par1, par2):
        pass # do something
    
    thread = threading.Thread(target=worker, args=("something", 0.0))
    thread.start()
    

    【讨论】:

    • 那么所有的条件和动作都是在worker中定义的?那么worker会是LIKE的run函数吗?
    • 是的,就像运行函数。
    【解决方案2】:

    您还可以像在示例中那样使用类并覆盖线程,您只需将对 super 的调用更改为正确。例如:

    import threading  
    class MyClass(threading.Thread):  
        def __init__(self,par1,par2):
           super(MyClass, self).__init__()
           self.var1 = par1  
           self.var2 = par2  
        def run(self):
           #do stuff with var1 and var2 while conditions are met
    

    对 init 的调用已经被自己发送给它,所以当你再次提供它时,它会在 Thread 类构造函数中设置另一个参数并且事情会变得混乱。

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多