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

歡迎訪問 生活随笔!

生活随笔

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

python

Python3——多线程之threading模块

發布時間:2023/12/20 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3——多线程之threading模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ?Python3——多線程之threading模塊

目錄

Python3——多線程之threading模塊

Threading模塊的對象

Threading模塊的Thread類

queue模塊(線程間通信)


Python 提供了多個模塊來支持多線程編程,包括 thread、 threading 和 Queue 模塊等。程序是可以使用 thread 和 threading 模塊來創建與管理線程。 thread 模塊提供了基本的線程和鎖定支持;而 threading 模塊提供了更高級別、功能更全面的線程管理。使用 Queue 模塊,用戶可以創建一個隊列數據結構,用于在多線程之間進行共享。(推薦使用threading模塊比thread模塊更高級)

?

  • Threading模塊的對象

對象

描述

Thread

線程對象

Lock

互斥鎖

Condition

條件變量

Event

事件,該事件發生后所有等待該事件的線程將激活

Semaphore

信號量(計數器)

Timer

定時器,運行前會等待一段時間

Barrier

創建一個障礙,必須達到指定數量線程才開始運行

?

  • Threading模塊的Thread類

對象

描述

name

線程名(屬性)

ident

線程標識符(屬性)

daemon

線程是否是守護線程(屬性)

_init_(group=None, tatget=None, name=None, args=(),kwargs ={}, verbose=None, daemon=None)

實例化一個線程對象,需要有一個可調用的 target,以及其參數 args或 kwargs。還可以傳遞 name 或 group 參數,不過后者還未實現。此外, verbose 標 志 也 是 可 接 受 的。 而 daemon 的 值 將 會 設定thread.daemon 屬性/標志

start()

開啟線程

run()

定義線程功能的方法(通常在子類中被應用開發者重寫)

Barrier

創建一個障礙,必須達到指定數量線程才開始運行

import threading from time import ctime, sleeploops = (3, 2)class Mythread(threading.Thread):def __init__(self, func, args, name=''):threading.Thread.__init__(self)self.name = nameself.func = funcself.args = args''' rewrite run() '''def run(self):self.func(*self.args)''' thread handle func --- while(1) ''' def loop(nloop, nsec):while True:print('start loop ' + str(nloop), 'at: ' + str(ctime()))sleep(nsec)def main():threads = []nloops = range(len(loops))for i in nloops:t = Mythread(loop, (i + 1, loops[i]), loop.__name__)threads.append(t)for i in nloops:threads[i].start()if __name__ == '__main__':main()

  • queue模塊(線程間通信)

Queue(maxsize = 0)

創建一個先入先出隊列。如果給定最大值,則在隊列沒有空間時阻塞;否則(沒有指定最大值),為無限隊列

LifoQueue(maxsize=0)

創建一個后入先出隊列。如果給定最大值,則在隊列沒有空間時阻塞;否則(沒有指定最大值),為無限隊列

PriorityQueue(maxsize=0)

創建一個優先級隊列。如果給定最大值,則在隊列沒有空間時阻塞,否則(沒有指定最大值),為無限隊列

Empty

當對空隊列調用 get*()方法時拋出異常

Full

當對已滿的隊列調用 put*()方法時拋出異常

qsize ()

返回隊列大小

empty()

如果隊列為空,則返回 True;否則,返回 False

full()

如果隊列已滿,則返回 True;否則,返回 False

put (item, block=Ture, timeout=None)

將 item 放入隊列。如果 block 為 True(默認)且 timeout 為 None,則在有可用空間之前阻塞;如果 timeout 為正值,則最多阻塞 timeout 秒;如果 block 為 False,則拋出 Empty 異常

get (block=True, timeout=None)

從隊列中取得元素。如果給定了 block(非 0),則一直阻塞到有可用的元素為止

join()

在隊列中所有元素執行完畢并調用上面的 task_done()信號之前,保持阻塞

import threading from random import randint from queue import * from time import ctime, sleepclass Mythread(threading.Thread):def __init__(self, func, name=''):threading.Thread.__init__(self)self.name = nameself.func = func''' rewrite run() '''def run(self):self.func()class MyQueue(): def __init__(self, q, loops):self.q = qself.loops = loopsdef WriteQueue(self):self.q.put('xxx', 1)def ReadQueue(self):value = self.q.get(1)print('value: ' + str(value))return valuedef Writer(self):while 1:for i in range(self.loops):self.WriteQueue()def Reader(self):while 1:for i in range(self.loops):aaa = self.ReadQueue()print("aaa = " + str(aaa))def main():que = Queue(32)nloops = randint(2, 5)q = MyQueue(que, nloops)t1 = Mythread(q.Writer, q.Writer.__name__)t2 = Mythread(q.Reader, q.Reader.__name__)t1.start()t2.start()if __name__ == '__main__':main()

?

總結

以上是生活随笔為你收集整理的Python3——多线程之threading模块的全部內容,希望文章能夠幫你解決所遇到的問題。

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