日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:_thread —- 底層多線程 API

_thread —- 底層多線程 API


該模塊提供了操作多個線程(也被稱為 輕量級進程任務(wù))的底層原語 —— 多個控制線程共享全局數(shù)據(jù)空間。為了處理同步問題,也提供了簡單的鎖機制(也稱為 互斥鎖二進制信號)。threading 模塊基于該模塊提供了更易用的高級多線程 API。

在 3.7 版更改: 這個模塊曾經(jīng)為可選項,但現(xiàn)在總是可用。

這個模塊定義了以下常量和函數(shù):

exception _thread.error

發(fā)生線程相關(guān)錯誤時拋出。

在 3.3 版更改: 現(xiàn)在是內(nèi)建異常 RuntimeError 的別名。

_thread.LockType

鎖對象的類型。

_thread.start_new_thread(function, args[, kwargs])

開啟一個新線程并返回其標識。 線程執(zhí)行函數(shù) function 并附帶參數(shù)列表 args (必須是元組)。 可選的 kwargs 參數(shù)指定一個關(guān)鍵字參數(shù)字典。

當函數(shù)返回時,線程會靜默地退出。

當函數(shù)因某個未處理異常而終結(jié)時,sys.unraisablehook() 會被調(diào)用以處理異常。 鉤子參數(shù)的 object 屬性為 function。 在默認情況下,會打印堆?;厮萑缓笤摼€程將退出(但其他線程會繼續(xù)運行)。

當函數(shù)引發(fā) SystemExit 異常時,它會被靜默地忽略。

在 3.8 版更改: 現(xiàn)在會使用 sys.unraisablehook() 來處理未處理的異常。

_thread.interrupt_main(signum=signal.SIGINT, /)

模擬一個信號到達主線程的效果。 線程可使用此函數(shù)來打斷主線程,雖然并不保證打斷將立即發(fā)生。

如果給出 signum,則表示要模擬的信號的編號。 如果未給出 signum,則將模擬 signal.SIGINT。

如果 python 沒有處理給定的信號 (它被設(shè)為 signal.SIG_DFL 或 signal.SIG_IGN),此函數(shù)將不做任何操作。

在 3.10 版更改: 添加了 signum 參數(shù)來定制信號的編號。

備注

這并不會發(fā)出對應(yīng)的信號而是將一個調(diào)用排入關(guān)聯(lián)處理句柄的計劃任務(wù)(如果句柄存在的話)。 如果你想要真的發(fā)出信號,請使用 signal.raise_signal()。

_thread.exit()

拋出 SystemExit 異常。如果沒有捕獲的話,這個異常會使線程退出。

_thread.allocate_lock()

返回一個新的鎖對象。鎖中的方法在后面描述。初始情況下鎖處于解鎖狀態(tài)。

_thread.get_ident()

返回當前線程的 “線程標識符”。它是一個非零的整數(shù)。它的值沒有直接含義,主要是用作 magic cookie,比如作為含有線程相關(guān)數(shù)據(jù)的字典的索引。線程標識符可能會在線程退出,新線程創(chuàng)建時被復(fù)用。

_thread.get_native_id()

返回內(nèi)核分配給當前線程的原生集成線程 ID。 這是一個非負整數(shù)。 它的值可被用來在整個系統(tǒng)中唯一地標識這個特定線程(直到線程終結(jié),在那之后該值可能會被 OS 回收再利用)。

可用性: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX。

3.8 新版功能.

_thread.stack_size([size])

返回創(chuàng)建線程時使用的堆棧大小。可選參數(shù) size 指定之后新建的線程的堆棧大小,而且一定要是0(根據(jù)平臺或者默認配置)或者最小是32,768(32KiB)的一個正整數(shù)。如果 size 沒有指定,默認是0。如果不支持改變線程堆棧大小,會拋出 RuntimeError 錯誤。如果指定的堆棧大小不合法,會拋出 ValueError 錯誤并且不會修改堆棧大小。32KiB是當前最小的能保證解釋器有足夠堆棧空間的堆棧大小。需要注意的是部分平臺對于堆棧大小會有特定的限制,例如要求大于32KiB的堆棧大小或者需要根據(jù)系統(tǒng)內(nèi)存頁面的整數(shù)倍進行分配 - 應(yīng)當查閱平臺文檔有關(guān)詳細信息(4KiB頁面比較普遍,在沒有更具體信息的情況下,建議的方法是使用4096的倍數(shù)作為堆棧大?。?。

Availability: Windows, pthreads.

Unix platforms with POSIX threads support.

_thread.TIMEOUT_MAX

Lock.acquire() 方法中 timeout 參數(shù)允許的最大值。傳入超過這個值的 timeout 會拋出 OverflowError 異常。

3.2 新版功能.

鎖對象有以下方法:

lock.acquire(blocking=True, timeout=- 1)

沒有任何可選參數(shù)時,該方法無條件申請獲得鎖,有必要的話會等待其他線程釋放鎖(同時只有一個線程能獲得鎖 —— 這正是鎖存在的原因)。

If the blocking argument is present, the action depends on its value: if it is False, the lock is only acquired if it can be acquired immediately without waiting, while if it is True, the lock is acquired unconditionally as above.

If the floating-point timeout argument is present and positive, it specifies the maximum wait time in seconds before returning. A negative timeout argument specifies an unbounded wait. You cannot specify a timeout if blocking is False.

如果成功獲取到所會返回 True,否則返回 False。

在 3.2 版更改: 新的 timeout 形參。

在 3.2 版更改: 現(xiàn)在獲取鎖的操作可以被 POSIX 信號中斷。

lock.release()

釋放鎖。鎖必須已經(jīng)被獲取過,但不一定是同一個線程獲取的。

lock.locked()

返回鎖的狀態(tài):如果已被某個線程獲取,返回 True,否則返回 False。

除了這些方法之外,鎖對象也可以通過 with 語句使用,例如:

 
 
 
 
  1. import _thread
  2. a_lock = _thread.allocate_lock()
  3. with a_lock:
  4. print("a_lock is locked while this executes")

注意事項:

  • 線程與中斷奇怪地交互:KeyboardInterrupt 異??赡軙蝗我庖粋€線程捕獲。(如果 signal 模塊可用的話,中斷總是會進入主線程。)

  • 調(diào)用 sys.exit() 或是拋出 SystemExit 異常等效于調(diào)用 _thread.exit()。

  • 不可能中斷鎖的 acquire() 方法 —— KeyboardInterrupt 一場會在鎖獲取到之后發(fā)生。

  • 當主線程退出時,由系統(tǒng)決定其他線程是否存活。在大多數(shù)系統(tǒng)中,這些線程會直接被殺掉,不會執(zhí)行 try … finally 語句,也不會執(zhí)行對象析構(gòu)函數(shù)。

  • 當主線程退出時,不會進行正常的清理工作(除非使用了 try … finally 語句),標準 I/O 文件也不會刷新。


新聞標題:創(chuàng)新互聯(lián)Python教程:_thread —- 底層多線程 API
標題URL:http://www.5511xx.com/article/cdgjgie.html