Python 多线程适合的使用场景为: I/O 密集型
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
- 使用线程可以把占据长时间的程序中的任务放到后台去处理。
- 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
- 程序的运行速度可能加快
- 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
应用样例
from threading import Thread
class SyncTask(object):
#同步任务
def run(self):
task_name_list = [ ... ]
task_func_list = [ ... ]
times = []
results = []
statuses = {}
for i in range(len(task_name_list)):
thread_task = SyncTaskThread(task_func_list[i], task_name_list[i])
threads.append(thread_task)
for i in range(len(task_name_list)):
threads[i].start()
for i in range(len(task_name_list)):
threads[i].join()
for t in threads:
if t.is_alive():
pass
else:
time, status, result = t.result
statuses.update(status)
times.append(time)
results.append(
_("%s, time spent: " "%s seconds") % (result, round(time, 3))
)
results = "\n".join(results)
return sum(times), statuses, results
class SyncTaskThread(Thread):
def __init__(self, func, name=""):
Thread.__init__(self)
self.name = name
self.func = func
self.result = self.func()
def get_result(self):
try:
return self.result
except Exception:
return None