python介面自動化九--面對對象編程二,搭建測試環境,多線程與多進程

來源:互聯網
上載者:User

標籤:資料庫   requests   assm   就是   任務   put   http   table   修改   

1.面對對象編程

1.1 基本概念

執行個體方法:在類裡面定義的函數都是執行個體方法,函數內有self變數

類方法:

  1. 不可以執行個體化,直接用類名調用
  2. 類方法可以使用類變數,cls.xxx
  3. 執行個體可以通過self.xx使用類方法
  4. 類方法裡面不能使用執行個體方法和執行個體變數

    靜態方法:

  5. 定義在類裡的普通函數
  6. 用不了執行個體方法,執行個體變數,類方法,類變數
  7. 不需要執行個體化,直接用類名調用

? 屬性方法:

  1. 是執行個體方法
  2. 不能有入參
  3. 用它的時候,直接m.func,把它當做變數來使用,後面不需要加括弧
  4. 它是擷取函數的傳回值

    解構函式:在執行個體被回收的時候執行,執行個體在程式結束時被回收

    建構函式:【init】類在執行個體化的時候,會自動執行

    私人函數:【del】兩個底線開頭,聲明該方法為私人方法,只能在類的內部調用 ,不能在類地外部調用

class My:    def __init__(self):#建構函式,類在執行個體化的時候,會自動執行         print(‘執行建構函式‘)    def __del__(self): #解構函式,在執行個體被銷毀的時候會自動執行          print(‘執行解構函式‘)    def say(self): #入參裡面有self的是執行個體方法,只有通過執行個體化才可以調用        print(‘我是牛奶‘)        self.__cry()    def __cry(self): #私人函數,只能在類裡面調用        print(‘哇哇哇‘)    @classmethod  #類方法,可以執行個體化調用,通過類名直接調用    def eat(cls):        print("吃飯")    @staticmethod  #靜態方法,不需要執行個體化,直接用類名調用    def run():        pass    @property   #屬性方法,是執行個體方法,使用的時候直接當做變數來用    def red_pag(self):        return 100

1.2裝飾器:他們是修改其他函數的功能的函數

裝飾器小例子

import time,requestsdef timer(func):    def war(*args,**kwargs):        start = time.time()        res = func(*args,**kwargs)        end_time = time.time()        print(‘啟動並執行時間是%s‘%(end_time-start))        return res    return war@timerdef down_img(name):    res=requests.get(‘http://www.nnzhp.cn/wp-content/uploads/2018/07/60f2add20f0659e27d26435f28b8472e.png‘)    open(‘a.png‘,‘wb‘).write(res.content)    return name+‘hhh‘@timerdef eat():    time.sleep(5)res = down_img(‘xxx‘)print(res)eat()

1.3 繼承

class Ln:  #父類    money=2000    def make_money(self):         print(‘掙錢‘)class Me(Ln)  #子類繼承父類    def make_money(self):         print(‘掙更多的錢’)
2.搭建測試環境

第一次搭建

  1. 安裝依賴軟體mysql,redis,tomcat,nginx,jdk,資料庫,中介軟體等
  2. 從SVN,git上擷取代碼
  3. 編譯(java,c,c#)
  4. 匯入基礎資料
  5. 修改設定檔
  6. 啟動項目

日常部署

  1. 擷取最新代碼
  2. 編譯
  3. 執行sql檔案(如果資料庫結構有改變的話)
  4. 修改設定檔
  5. 重啟項目
3.多線程與多進程

進程:一個進程就是一個程式。

線程:線程就是進程裡面最小的執行單元。 一個進程裡面最少有一個線程,可以有多個線程, 每個線程之間都是互相獨立的。

由於python裡面的GIL(全域解譯器鎖)機制,它確保任何時候都只有一個Python線程執行 ,所以python裡面的多線程,利用不了多核cpu,只能利用一個核心的cpu。在CPU密集型進程,那多線程並不能帶來效率上的提升,相反還可能會因為線程的頻繁切換,導致效率下降; 如果是IO密集型進程,多線程進程可以利用IO阻塞等待時的空閑時間執行其他線程,提升效率。

多線程適用於IO密集型任務,多進程適用於CPU密集型任務

import threading,timeall_res=[]def run():   time.sleep(5)   print(‘%s 哈哈哈‘%name)   all_res.append(name)threads=[] #存放所有的子線程for i in range(10) #開10個子線程   t = threading.Thread(target=run,args=(i,))   threads.append(t)   t.start()   #方法一:統計當前線程數量判斷所有子線程是否運行完成while threading.active_count()!=1:       pass    #當while=1,說明子線程已經完成,結束迴圈,程式向下執行#方法二:主線程迴圈等待所有的子線程結束後再結束for t in threads:    t.join()#等待子進程運行完以後再運行print(all_res)

守護線程:當主線程結束後,守護進程也會結束

import threading,timedef run():   time.sleep(8)   print(‘run。。‘)for i in range(10):   t=threading.Thread(target=run)   t.setDaemon(True) #設定子線程為一個守護進程   t.start()  print(‘over‘)#主線程結束後,子線程就結束了,run函數不會執行

import threadingfrom threading import Locknum = 0Lock = Lock()def run():    global num    lock.acquire() #加鎖    num+=1    lock.release()  #解鎖    with lock:  #自動加解鎖          num+=1for i in range(100):    t=threading.Thread(target=run)    t.start()while threading.active_count()!=1:    passprint(num)

線程池

可以控制最多允許多少個線程同時進行,超出的部分自動等待。解決了線程運行分配任務不均,比如一個線程還在苦苦工作,而另一個線程已經完成,卻無法協助前一個線程分擔的情況 。

import threadpool,pymongo,requestsclient = pymongo.MongoClient(host=‘118.24.3.40‘,port=27017)table=client[‘liken‘][‘qq_group_likun‘]all_table=[i.get(‘qq‘) for i in table.find()]url = ‘http://q4.qlogo.cn/g?b=qq&nk=%s&s=140‘def down_img(qq_num):    res=requests.get(url%qq_num).content    with open(‘%s.jpg‘%qq_num,‘wb‘) as fw:         fw.write(res)pool = threadpool.ThreadPool(200) #定義線程池的大小all_requests=threadpool.makeRequests(down_img,all_qq) #分配資料for i in all_requests:       pool,putRequest(r) #發請求#[pool.putReques(r) for r in all_requests]pool.wait() #等待所有線程運行完成print(‘done!下載完成。‘)

python介面自動化九--面對對象編程二,搭建測試環境,多線程與多進程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.