日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的threading_Python中Threading用法详解

發布時間:2025/3/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的threading_Python中Threading用法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python的threading模塊松散地基于Java的threading模塊。但現在線程沒有優先級,沒有線程組,不能被銷毀、停止、暫停、開始和打斷。 Java Thread類的靜態方法,被移植成了模塊方法。

main thread: 運行python程序的線程

daemon thread 守護線程,如果守護線程之外的線程都結束了。守護線程也會結束,并強行終止整個程序。不要在守護進程中進行資源相關操作。會導致資源不能正確的釋放。在非守護進程中使用Event。

Thread 類

(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

group: 為以后的ThreadGroup類預留

target: 被執行的對象,由run()方法執行

args: target對象使用的參數

daemon: 是否為守護進程

start()

每個thread 對象都只能被調用1次start()

run()

如果創建Thread的子類,重寫該方法。負責執行target參數傳來的可執行對象。

join()

阻塞線程直到結束。

GIL

在CPython中,由于GIL的存在,Python每次只能執行一個線程。如果要充分利用多核機器的計算資源需要使用multiprocessing或者是concurrent.futures.ProcessPollExecutor。 但,但如果你想要很多I/O相關的并發操作,threding仍然是一個很好的選擇 。?因為系統自動實現了線程的上下文切換。

from threading import Thread

import requests

url = 'http://www.baidu.com'

urls = [url]*20

threads = []

for url in urls:

t = Thread(target=requests.get, args=(url, ))

t.start()

threads.append(t)

for t in threads:

t.join()

鎖(Lock)對象

原始鎖(primitive lock),當它鎖住的時候,它是一種不屬于任何一個線程的同步原語(synchronization primitive)。 在Python中,他是目前可用的最底層的同步原語,由_thread模塊提供。

一個原始鎖有兩個狀態:locked 和unlocked。鎖創建時,處于unlocked狀態。 鎖由兩個基本方法:acquire()和release()。

當處于unlocked狀態時,acquire(()方法可以將狀態變為locked,并立即返回。當處于locked狀態時,acquire()會阻塞直至另一個線程調用了release()使改鎖解鎖,然后acquire()將鎖上鎖,并返回。

release()方法只能在鎖locked時別調用,并釋放鎖。否則會拋出RuntimeError錯誤。

如果有多個 acquire()在等待解鎖,則不確定哪一個哪一個會被觸發。

class threading.Lock

如果一個線程acquire了一個鎖,那么后續獲取它的線程都會被阻塞,直至鎖被釋放。任何線程都可以釋放鎖。

Lock是一個工廠函數,返回當前平臺下最高效的concrete Lock類的實例。

Lock支持上下文管理方法(context management protocol),也就是with 語句。在存在競態條件(race condition)的時候,要使用鎖。比如多線程共同操作某個數據。

# 摘自python Cookbook

import threading

class SharedCounter:

def __init__(self, init_value=0):

self._value = init_value

self._value_lock = threading.Lock()

def incr(self, delta=1):

# 在這里使用了with 語句,創建一個鎖,增加值,釋放鎖。

with self._value_lock:

self._value += 1

RLock對象

可重入鎖(reentrant lock)。感覺是一個鎖中鎖,就是可以遞歸的鎖。等見到具體的應用例子再寫。

Condition對象

condition變量總是與某種鎖相關,鎖可以是傳過來的,也可以通過默認設置創建。如果有多個 condition對象需要共享一個鎖時,傳遞一個鎖是非常有用的。鎖是condition對象的一部分,你不用刻意的跟蹤它。

Timer對象

Timer是Thread的子類,所以也要接受function參數,也可以被start()。 它的run()函數被重寫為先event.wait(interval),再啟動function。

Barrier對象

實現某些服務的共進退。

threading.Barrier(parties, action=None, timeout=None)

設置n=parties個線程,當n個barrier.wait()被調用后,所有這些調用的阻塞被同時解除,執行action

感覺Barrier可以實現很多復雜的功能。

總結

以上是生活随笔為你收集整理的python中的threading_Python中Threading用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲视频综合网 | 久久久夜色 | 国产精品一区二区三区线羞羞网站 | 日韩欧美网 | 欧美成人免费高清视频 | 国产成人精品av | 久久丫精品国产亚洲av不卡 | 一区二区三区四区在线免费观看 | 亚洲少妇中文字幕 | 国产簧片 | 日本一区高清 | 亚洲男人在线 | 伊人网综合| 亚洲欧美日韩国产精品 | 久久精品视频9 | 国产情侣在线视频 | 这里只有精品免费视频 | 中文字幕1区 | 少妇久久久 | 免费毛片av | 久久九精品 | 97人人爱 | 中文字幕日韩欧美一区二区三区 | 欧美精品在线免费观看 | 被室友玩屁股(h)男男 | 日韩精品电影一区二区三区 | 天堂亚洲网 | 琪琪五月天 | 福利视频导航网 | 欧美xxxxxhd| 久久怡红院 | 2018国产大陆天天弄 | 日韩av一区二区三区在线 | 亚洲一区视频在线播放 | 亚洲久久影院 | 亚洲色在线视频 | 精品人妻一区二区三区浪潮在线 | 黄色永久视频 | 激情开心站 | 日本免费福利视频 | 国产精品久久国产精麻豆96堂 | 久草视频中文在线 | 禁漫天堂黄漫画无遮挡观看 | 在线观看免费人成视频 | 天天插天天插 | 天海翼视频在线观看 | 欧美一级免费大片 | 色综合天天综合综合国产 | 亚洲成人免费观看 | 欧美成人vr18sexvr | 一卡二卡三卡在线视频 | 国产成人精品一区二区色戒 | 欧美极品喷水 | 亚洲乱熟女一区二区 | 久久综合88| 成年人国产 | 人妻激情文学 | 欧美一级淫片免费视频魅影视频 | 精品少妇人妻av免费久久洗澡 | 亚洲成人自拍视频 | 精品久久久久久无码人妻 | 精品美女一区二区三区 | 小嫩嫩精品导航 | 国产精品国语 | 欧美日韩国产中文字幕 | 日韩精品极品视频 | 国产网红主播精品av | 久久一级视频 | 精品一区二区视频 | 免费成人深夜夜行p站 | 女性毛片| www.夜夜骑| 日韩一级片免费在线观看 | 一级片在线观看视频 | 亚洲成av人片在线观看无码 | 182tv福利视频 | 欧美第二区 | 嫩草国产在线 | 日韩黄色精品视频 | av美女在线观看 | 亚洲精品字幕 | 久草青青草 | 国产一级精品视频 | 女色婷婷 | 一区二区中文字幕 | 中文字幕久久熟女蜜桃 | 国产不卡av在线播放 | 国产做受高潮动漫 | 中文字幕视频二区 | 国产欧美精品区一区二区三区 | 国产在线观看www | 污视频网站免费在线观看 | 国产黄色91 | 麻豆成人精品国产免费 | 在线激情视频 | 噜噜狠狠狠狠综合久久 | 精品视频在线观看 | 99在线观看免费视频 | av毛片在线免费看 |