下面是python代码,没有通过从threading.thread继承的类创建的线程就可以了。 例如,通过将目标函数作为 threading.thread(( 的参数来创建线程
import threading ,time
from time import sleep, ctime
import functools
def find(func):
@functools.wraps(func)
def wrapper(*args,**kwargs):
print("ags:%s,%sn" % (args,kwargs))
return func(*args, **kwargs)
return wrapper
@find
def now() :
return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )
class myThread (threading.Thread) :
"""docstring for myThread"""
@find
def __init__(self, nloop, nsec) :
super(myThread, self).__init__()
self.nloop = nloop
self.nsec = nsec
@find
def run(self):
print('start loop', self.nloop, 'at:', ctime())
sleep(self.nsec)
print('loop', self.nloop, 'done at:', ctime())
@find
def main():
thpool=[]
print('starting at:', now())
for i in range(10):
thpool.append(myThread(i,2))
for th in thpool:
th.start()
for th in thpool:
th.join()
print('all Done at:', now())
if __name__ == '__main__':
main()
我收到错误信息如下:
File "F:questionmultithreadfmclass.py", line 15, in wrapper
print("ags:%s,%sn" % (args,kwargs))
File "D:ProgramFilesPython352libthreading.py", line 813, in __repr__
assert self._initialized, "Thread.__init__() was not called"
AssertionError: Thread.__init__() was not called
如何删除错误? 提前。
在初始化之前打印Thread
对象,这是不可能的。由于您的装饰器,找到此错误并不容易,但是如果您先调用func
,那么它可以工作:
def find(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print("ags:%s,%sn" % (args, kwargs))
return result
return wrapper