python的threading模块有提供多线程的执行方法,在计算密集型操作里也用不上,很多时候是在处理IO密集型的操作里使用,能为我们节省不少时间,但他本身不提供获取线程执行结果,需要我们自行实现,目前最简单的办法就是使用Queue来实现,Queue在线程之间是共享的,并且本身就提供了良好的加锁机制,可以直接使用。
首先简单封装下threading模块,取名为mythreading.py:
# coding=utf-8
# python2适用 python3可能略有不同,请自行修改
import threading
class MyMutiThread():
def __init__(self):
self.runlist = list()
def muti_thread_add(self, func, name, *args, **kwargs):
t = threading.Thread(target=func, name=name, args=args, kwargs=kwargs)
self.runlist.append(t)
def muti_thread_start(self):
for t in self.runlist:
t.start()
def muti_thread_wait(self):
for t in self.runlist:
t.join()
接下来具体实现多线程的方法:
# coding=utf-8
import Queue
import mythreading
def my_function(arg1):
'''你的操作'''
time.sleep(1) #模拟你的操作
result = "执行结果"
result_q.put(result)
if __name__ == '__main__':
# 开始处理并发
result_q = Queue.Queue() # 创建队列记录线程执行结果
test_muti_thread = mythreading.MyMutiThread()
test_muti_thread.muti_thread_add(my_function, "my_thread_name1", "arg1", result_q)
test_muti_thread.muti_thread_add(my_function, "my_thread_name2", "arg2", result_q)
test_muti_thread.muti_thread_start()
test_muti_thread.muti_thread_wait() # 等待执行完成
result = list()
while not result_q.empty(): # 校验执行结果
result.append(result_q.get())
print(result) #获得结果
网友评论