在使用多線程的時候難免想要獲取其操作完的返回值進行其他操作,下面的方法以作參考:
一,首先重寫threading類,使其滿足調用特定的方法獲取其返回值
import threading
class MyThread(threading.Thread):
"""重寫多線程,使其能夠返回值"""
def __init__(self, target=None, args=()):
super(MyThread, self).__init__()
self.func = target
self.args = args
def run(self):
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result # 如果子線程不使用join方法,此處可能會報沒有self.result的錯誤
except Exception:
return None
二,調用get_result()方法,最終列表retval就是多線程返回值的集合:
def parse_detail_page(self,items_list):
retval, RetList, _Threads = [], [], []
for url in items_list:
t = MyThread(target=self.threadItem, args=(url,))
t.start()
_Threads.append(t)
for t in _Threads:
t.join()
retval.append(t.get_result())
def threadItem(self,url):
"""多線程請求"""
response = requests.get(url)
return response.text