threading 模块作为python的一个多线程的模块,本身并没有返回值,我们可以通过代码中的方法创建有返回值的子类。
# python version 3.9
import threading
class MyThread(threading.Thread):
def __init__(self, group=None, target=None, name=None, args=()):
"""
传入的target是有返回值的函数
args为需要传入的变量数组,如果需要传入多个变量,也可以写成被注释掉的内容
"""
super().__init__(target=target, args=args)
self._result = []
# 重写run函数,此函数被start函数调用
def run(self):
try:
if self._target:
# self._result = self._target(*self._args)
self._result = self._target(self._args)
finally:
del self._target, self._args
def get_result(self):
MyThread.join(self)
try:
return self._result
except Exception:
return None
使用concurrent中的futures进行多线程的处理。
可以使用比较简单的方法
from concurrent import futures
def func(i):
if i == 1:
return 'hello'
if i == 2:
return 'What\'s your name?'
if __name__ == '__main__':
with futures.ThreadPoolExecutor(max_workers=2) as executor:
future1 = executor.submit(func, 1)
future2 = executor.submit(func, 2)
a = future1.result()
b = future2.reuslt()
print(a, b)