python的threading模块有提供多线程的执行方法,在计算密集型操作里也用不上,很多时候是在处理IO密集型的操作里使用,能为我们节省不少时间,但他本身不提供获取线程执行结果,需要我们自行实现,目前最简单的办法就是使用Queue来实现,Queue在线程之间是共享的,并且本身就提供了良好的加锁机制,可以直接使用。
首先简单封装下threading模块,取名为mythreading.py:
# coding=utf-8# python2适用 python3可能略有不同,请自行修改import threadingclass 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-8import Queueimport mythreadingdef 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) #获得结果
作者:__Brick__
链接:https://www.jianshu.com/p/a012d9cc3c35
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦