Python之多執行緒 Threading模組

2022-09-02 10:48:08 字數 2624 閱讀 3519

1、threading模組提供的類

thread,lock,rlock,condition,semaphore,event,timer,local

2、threading模組提供的常用的方法

(1)threading.currentthread(): 返回當前的執行緒變數。

(2)threading.enumerate(): 返回乙個包含正在執行的執行緒的list。正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。

(3)threading.activecount():返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果

一、thread 執行緒類

1、t1=threading.thread(target=,name=,args=,kwargs=)

引數說明:

•group:執行緒組,目前還沒有實現,庫引用中提示必須是none;

•target:要執行的方法;

•name:執行緒名;

•args/kwargs:要傳入方法的引數。

import threading

import time

def func1(a=none,b=none):

print a,b

time.sleep(1)

t1=threading.thread(target=func1,args=('hello','world')) //這句話只是建立了乙個執行緒,並未執行這個執行緒,此時執行緒處於新建狀態。

t1.isalive() 執行緒是否在執行

t1.getname 取執行緒名

t1.setname('test1') 設定執行緒名

t1.start() 啟動執行緒,此時執行緒仍未處於執行狀態,只是處於準備狀態。

t1.join() 等待執行緒執行完

程序所在的執行緒是主線程

2、守護執行緒

t1.setdaemon(true)

主程序執行結束時,如果是守護執行緒,且守護執行緒沒有執行結束,也一併隨著主線程退出

# encoding=utf-8

import threading

import time

def func1(a=none, b=none):

print a,b

print 'enter func1'

time.sleep(5)

print 'exit func1'

t1 = threading.thread(target=func1, args=('hello ','world!'))

print t1.isalive()

print t1.getname()

t1.setdaemon(true)

print 'daemon:',t1.isdaemon()

t1.setname('test1')

print t1.getname()

t1.start()

time.sleep(1.1)

print t1.isalive()

print 'main thread end'

3、threading.currentthread() 主線程mainthread

二、多執行緒程式設計的方式

1、建立執行緒的兩種方式

方式一:thread的方式,新建乙個執行緒例項,通過target傳入執行流。通過args傳入引數

方式二:thread類通過重寫的方式,t1.start()(內部呼叫了run())。所以可以重寫run()方法,達到我們想要的效果

2、方式二:重寫thread類

import threading

class mythread(threading.thread):

def __init__(self,a):

threading.thread.__init__(self):

self.a=a

def run(self):

print 'now sleep',self.a,'seconds'

time.sleep(a)

print 'sleep end'

t1=mythread(3)

t2=mythread(2)

t1.start()

t2.start()

t1.join()

t2.join()

#隱含問題:對於執行緒的執行結果,主線程如何獲取?

(1)通過佇列的方式

(2)通過全域性變數的方式

3、併發與並行

併發是指乙個時間段內同時執行,表示的是乙個區間

而並行是指在同乙個時間點上都在執行,是乙個點,並且併發在同一時間點上只能有乙個程式在執行

併發執行緒的兩種關係:同步與互斥。

三、執行緒池

from multiprocessing.dummy import pool

def func(a):

time.sleep(1)

print a

if __name__=='__main__':

lista=[1,2,'a','b','5']

pool=pool(5)

pool.map(func,lista)

pool.close() #執行緒池不接受新執行緒的請求

pool.join() #等待執行緒全部執行完

Python之多執行緒

1 呼叫thread模組中的start new thread 函式來產生新執行緒 thread.start new thread function,args kwargs function 執行緒函式。args 傳遞給執行緒函式的引數,他必須是個tuple型別。kwargs 可選引數。2 使用thr...

python之多執行緒

學習了一下多執行緒 用到爬蟲裡面簡直爽歪歪呀 定義就很簡單,為了實現高併發,能夠同時在乙個指令碼下執行多個程式,節約時間 新增執行緒用到的 import threading as td def sum num1,num2 sum num1 num2 print sss sum def divided...

python之多執行緒

我們在商超買東西時,當只有乙個收銀台時,會導致排很長的隊。如果有多個收銀台同時工作的話,會大大提高效率。這是生活中的多執行緒,即多個執行緒同時工作。我們接下來用 案例講解多執行緒與單執行緒的區別。單執行緒即在程式執行過程中,按照一定的先後順序執行。多執行緒即多個事件同時發生。單執行緒 import ...