我正在创建一个类,其中有几种方法使用线程。
要使用线程,我经常创建一个子线程的线程。我应该在顶级创建的线程如下:
class mainclass(object):
def __init__(self, ):
pass
def method_a(self, ):
print('method_a start')
tlist = list(range(10))
ps = [subthread(tlist) for i in range(4)]
for p in ps:
p.start()
for p in ps:
p.join()
print('method_a finish', tlist)
class subthread(threading.Thread):
def __init__(self, alist):
threading.Thread.__init__(self)
self.alist = alist
def run(self, ):
while self.alist:
t = self.alist.pop(0)
print(self.getName(), t)
sleep(1)
或者像这样使用它的方法:
class mainclass(object):
def __init__(self, ):
pass
def method_a(self, ):
class subthread(threading.Thread):
def __init__(self, alist):
threading.Thread.__init__(self)
self.alist = alist
def run(self, ):
while self.alist:
t = self.alist.pop(0)
print(self.getName(), t)
sleep(1)
print('method_a start')
tlist = list(range(10))
ps = [subthread(tlist) for i in range(4)]
for p in ps:
p.start()
for p in ps:
p.join()
print('method_a finish', tlist)
据我所知,如果我使用第二种,类方法可能会很长, 并且似乎 jedi.vim 无法正常工作。
如果我使用第一个,对于每个类方法,我必须创建一个具有不同名称的顶级类,我只在一个地方使用。
那我该使用哪个?
答案 0 :(得分:0)
你真的不需要创建一个类。如果它只是运行一个方法,你可以通过目标参数将方法直接传递给Thread类:
class Main(object):
def run(self, alist, thread_id):
while alist:
t = alist.pop(0)
print(thread_id, t)
sleep(1)
def method_a(self):
print('method_a start')
tlist = list(range(10))
ps = [Thread(target=self.run, args=(tlist, i)) for i in range(4)]
for p in ps:
p.start()
for p in ps:
p.join()
print('method_a finish')