from threading import Thread
class ThreadWithReturnValue(Thread):
def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None):
Thread.__init__(self, group, target, name, args, kwargs, daemon=daemon)
self._return = None
def run(self):
if self._target is not None:
self._return = self._target(*self._args, **self._kwargs)
def join(self):
Thread.join(self)
return self._return
使用方法:
一、引用该Python多线程方法:
from ThreadWithReturn import *二、编写自己需要多线程运行的函数:
def DataFrame2Matrix(n_users, n_items, dataframe): train_data_matrix = np.zeros((n_users, n_items)) for line in dataframe.itertuples(): train_data_matrix[line[1] - 1, line[2] - 1] = line[3] return train_data_matrix三、开启多线程:
thread1 = ThreadWithReturnValue(target=DataFrame2Matrix, args=(n_users, n_items, train_data)) thread2 = ThreadWithReturnValue(target=DataFrame2Matrix, args=(n_users, n_items, test_data)) thread1.start() thread2.start() train_data_matrix = thread1.join() # 获取返回值 test_data_matrix = thread2.join() # 获取返回值