python學習筆記8---爬蟲進階

多線程概念和threading模塊介紹

沒有多線程

import threading

def coding():
    for x in range(3):
        print('正在寫代碼%s'%x)
        time.sleep(1)

def drawing():
    for x in range(3):
        print('正在畫圖%s'%x)
        time.sleep(1)
def main():
    coding()
    drawing()

if __name__=='__main__':
    main()

多線程

import threading

def coding():
    for x in range(3):
        print('正在寫代碼%s'%x)
        time.sleep(1)

def drawing():
    for x in range(3)
        print('正在畫圖%s'%x)
        time.sleep(1)

def main():
    t1 = threading.Thread(target = coding)
    t2 = threading.Thread(target = drawing)
    t1.start()
    t2.start()

if __name__=='__main__':
    main()

使用Thread類創建多線程

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 26 16:37:44 2019

@author: admin
"""

import threading
import time

class CodingThread(threading.Thread):
    def run(self):
        for x in range(3):
            print('正在寫代碼%s'%threading.current_thread())
            time.sleep(1)
            
            
            
class DrawingThread(threading.Thread):
    def run(self):
        for x in range(3):
            print('正在畫圖%s'%threading.current_thread())
            time.sleep(1)   
            
def main():
    t1 = CodingThread()
    t2 = DrawingThread()
    
    t1.start()
    t2.start()
    
    
if __name__=='__main__':
    main()

多線程共享全局變量以及鎖機制

鎖用在改變全局變量的地方,訪問全局變量時不需要加鎖

import threading

VALUE = 0
gLock = threading.Lock()
def add_value():
    # 函數內部改變全局變量值時要加下面這行
    global VALUE
    gLock.acquire()
    for x in range(100000):
        VALUE +=1
    gLock.release()    
    print('value:%d'%VALUE)
    
    
def main():
    for  x in range(2):
        t=threading.Thread(target=add_value)
        t.start()
        
if __name__=='__main__':
    main()
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章