Python threading模塊

threading模塊是Python裏面經常使用的線程模塊。提升處理任務的效率
進程和線程的區別:
進程:
    優勢:同時利用多個CPU,可以同時進行多個操做
    缺點:耗費資源(從新開闢內存空間)
線程:
    優勢:共享內存,io操做時候,創造併發操做
    缺點:搶佔資源
進程不是越多越好,通常CPU個數=進程個數
線程也不是越多越好,請求上下文切換耗時
計算機執行任務的最小單元:線程
 
threading建立多個線程,可是是快速切換的(因爲GIL鎖的存在)
例:     
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import time
import threading
def backup(backup_number_per,backup_server_ip,check_time_period):
    time.sleep(2)
    print(backup_number_per,backup_server_ip,check_time_period)
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 統計備份策略表裏全部的目標備份機,而後每一個線程用一個備份機進行備份
backup_server_ip_list = ['172.10.10.1','172.10.10.2','172.10.10.3']
thread_list = [] #線程存放列表
backup_number_per=3 # 每次最多備份幾個DB
check_time_period=10
for backup_server_ip in backup_server_ip_list:
    print 'starting Thread backup to %s' % (backup_server_ip)
     t =threading.Thread(target=backup,args=(backup_number_per,backup_server_ip,check_time_period,))
    t.setDaemon(True)
    thread_list.append(t)
for t in thread_list:
    t.start()
for t in thread_list:
    t.join()
print current_time+' All Backup Finish!!!'
結果:

 

在線程裏,常常會用到setDaemon()和join()方法。
1)setDaemon()方法理解:主線程A中,建立了子線程B,而且在主線程A中調用了 B.setDaemon(),這個意思是把主線程A設置爲守護進程,這時候,要是A執行結束了,無論B是否完成,一併和A退出。必選在start()方法調用以前設置,若是不設置爲守護進程,程序會被無限掛起,只有等待了全部線程結束它才結束。
2)join()方法:主線程A中,建立了子線程B,而且在主線程A中調用了B.join(),那麼A會在調用的地方等待,直到子線程B完成操做後,才能夠接着往下執行,那麼在調用這個線程時可使用被調用線程的join方法,join([timeout])裏邊的參數是可選的,表明線程運行最大時間,若是超過這個時間,無論此線程是否執行完畢都會被回收,而後主線程或函數都會接着執行的,若是線程執行時間小於參數表示的時間,則接着執行,不用必定要等到參數表示的時間
相關文章
相關標籤/搜索