python的threading模塊有提供多線程的執(zhí)行方法,在計算密集型操作里也用不上沉颂,很多時候是在處理IO密集型的操作里使用条摸,能為我們節(jié)省不少時間,但他本身不提供獲取線程執(zhí)行結(jié)果铸屉,需要我們自行實現(xiàn)钉蒲,目前最簡單的辦法就是使用Queue來實現(xiàn),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()
接下來具體實現(xiàn)多線程的方法:
# coding=utf-8
import Queue
import mythreading
def my_function(arg1):
'''你的操作'''
time.sleep(1) #模擬你的操作
result = "執(zhí)行結(jié)果"
result_q.put(result)
if __name__ == '__main__':
# 開始處理并發(fā)
result_q = Queue.Queue() # 創(chuàng)建隊列記錄線程執(zhí)行結(jié)果
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() # 等待執(zhí)行完成
result = list()
while not result_q.empty(): # 校驗執(zhí)行結(jié)果
result.append(result_q.get())
print(result) #獲得結(jié)果