麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Python中多線程及程序鎖淺析

2020-02-23 06:19:41
字體:
來源:轉載
供稿:網友

Python中多線程使用到Threading模塊。Threading模塊中用到的主要的類是Thread,我們先來寫一個簡單的多線程代碼:
代碼如下:
# coding : uft-8
__author__ = 'Phtih0n'
import threading

class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        global n
        print n
        n += 1

if "__main__" == __name__:
    n = 0
    ThreadList = []
    for i in range(0, 10):
        t = MyThread()
        ThreadList.append(t)
    for t in ThreadList:
        t.start()
    for t in ThreadList:
        t.join

最普通的一個多線程小例子。我一筆帶過地講一講,我創建了一個繼承Thread類的子類MyThread,作為我們的線程啟動類。按照規定,重寫Thread的run方法,我們的線程啟動起來后會自動調用該方法。于是我首先創建了10個線程,并將其加入列表中。再使用一個for循環,開啟每個線程。在使用一個for循環,調用join方法等待所有線程結束才退出主線程。

這段代碼看似簡單,但實際上隱藏著一個很大的問題,只是在這里沒有體現出來。你真的以為我創建了10個線程,并按順序調用了這10個線程,每個線程為n增加了1.實際上,有可能是A線程執行了n++,再C線程執行了n++,再B線程執行n++。

這里涉及到一個“鎖”的問題,如果有多個線程同時操作一個對象,如果沒有很好地保護該對象,會造成程序結果的不可預期(比如我們在每個線程的run方法中加入一個time.sleep(1),并同時輸出線程名稱,則我們會發現,輸出會亂七八糟。因為可能我們的一個print語句只打印出一半的字符,這個線程就被暫停,執行另一個去了,所以我們看到的結果很亂),這種現象叫做“線程不安全”:

于是,Threading模塊為我們提供了一個類,Threading.Lock,鎖。我們創建一個該類對象,在線程函數執行前,“搶占”該鎖,執行完成后,“釋放”該鎖,則我們確保了每次只有一個線程占有該鎖。這時候對一個公共的對象進行操作,則不會發生線程不安全的現象了。

于是,我們把代碼更改如下:

代碼如下:
# coding : uft-8
__author__ = 'Phtih0n'
import threading, time

class MyThread(threading.Thread):
    def __init__(self):

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 性爱视频在线免费 | 午夜精品久久久久久中宇 | 圆产精品久久久久久久久久久 | 天海翼无删减av三级在线观看 | 久久久三级免费电影 | 手机视频在线播放 | 91久久精品一区二区 | 福利在线播放 | 国产精品久久久久久久久久东京 | av成人一区二区 | 精品一区二区三区日本 | 成人三级电影网站 | 免费激情网站 | 原来神马影院手机版免费 | 最新福利在线 | 在线看免费观看av | 国产成人高清成人av片在线看 | 免费看毛片的网站 | 媚药按摩痉挛w中文字幕 | 在线播放免费人成毛片乱码 | 一级片九九 | 激情亚洲一区二区三区 | 国产大片中文字幕在线观看 | 欧美xxxxx视频 | 免费久久久 | 欧美成人激情在线 | 中文字幕一区2区 | h视频免费在线观看 | 欧美日韩爱爱视频 | 欧美一极视频 | 久久久久久麻豆 | 毛片在线免费播放 | 成人在线视频精品 | 国产一区二区高清在线 | 日本精品久久久久 | 国产精品一区在线免费观看 | 成人午夜在线观看视频 | 国产亚洲美女精品久久久2020 | 精品久久久一二三区播放播放播放视频 | 欧美日韩免费一区 | 日本黄色免费观看视频 |