2013-03-01 89 views
0

从线程sublassing时通过自定义函数我有这样的代码我怎么能在Python

class MyTh(threading.Thread): 

    def __init__(self, group=None, target=None, name=None, 
       args=(), kwargs=None, verbose=None): 
     threading.Thread.__init__(self, group=group, target=target, name=name, 
            verbose=verbose) 
     self.args = args 
     self.kwargs = kwargs 
     return 

    def run(self): 
     logging.debug('running with %s and %s', self.args, self.kwargs) 
     return 

def my_func(): 
    print 'Everything OK' 

当我做到这一点

t1 = MyTh(name='Thread '+ str(i), target=myfunc, args=("test",), kwargs={'a':'A', 'b':'B'}) 
    t1.start() 

我的目标函数是不是在所有调用。我怎么能让我的线程调用目标中给出的默认功能

+0

你的基本设置正常工作对我来说,除了'目标= myfunc'应该是'target = my_func' – 2013-03-01 09:12:23

回答

1

通过重写run()方法,你搞砸了标准run()并且永远不会调用目标。你需要做的是要么不覆盖的方法或重写它像这样:

def run(self): 
    logging.debug('running with %s and %s', self.args, self.kwargs) 
    super(MyTh, self).run() 
    return 

这样的标准Thread.run也被称为并执行target

此外,您还没有将argskwargs传递给Thread的构造函数。您需要有:

threading.Thread.__init__(self, group=group, target=target, name=name, 
           verbose=verbose, args=args, kwargs=kwargs) 

为了正确设置它们。然后你就可以改变你的my_func到:

def my_func(arg1, a, b): 
    print arg1, a, b 
    print 'Everything OK' 

此外,MyTh的构造和Thread.__init__电话是不必要的长。这是很多短,可读:

def __init__(self, *args, **kwargs): 
    threading.Thread.__init__(self, *args, **kwargs) 
    self.args = kwargs['args'] 
    self.kwargs = kwargs['kwargs'] 

通知您传递给构造argskwargs如何实际上访问的kwargs['args']kwargs['kwargs']

+0

这是工作,但我的论证'测试'不能在myfunction里面访问,我怎么能得到那 – user192362127 2013-03-01 09:12:59

+0

@ user192362127看看编辑。还有一个关于如何让你的自定义'MyTh'更具可读性的建议。 – dmg 2013-03-01 09:26:12