python類庫32 多執行緒

2021-09-08 02:41:01 字數 3369 閱讀 1611

一 python 多執行緒

因為cpython的實現使用了global interpereter lock(gil),使得python中同一時刻只有乙個執行緒在執行,從而簡化了python直譯器的實現,且python物件模型天然地執行緒安全。如果你想你的應用程式在多核的機器上使用更好的資源,建議使用multiprocessing或concurrent.futures.processpoolexecutor。但是如果你的程式是io密集型,則使用執行緒仍然是很好的選擇。 

二 python 多執行緒使用的兩種方法

例項:import threading

import time

def worker(num):

print (threading.currentthread().getname() + 

'start

') 

time.sleep(10)

print (threading.currentthread().getname() + 

'running

')

print (threading.currentthread().getname() + 

"" + str(num))

print (threading.currentthread().getname() + 

'exit

')

def deamon():

print (threading.currentthread().getname() + 

'start

')

time.sleep(20)

print (threading.currentthread().getname() + 

'running

')

print (threading.currentthread().getname() + 

'exit

')

print(threading.currentthread().getname())

d = threading.thread(name=

'deamon

', target=deamon)

d.setdaemon(true)

d.start()

w = threading.thread(name=

'worker

', target=worker, args=(10,))

w.start()

class myworker(threading.thread):

def__init__(self, num):  

threading.thread.

__init__(self)  

self.num = num  

self.thread_stop = false  

def run(self): 

print (self.getname()+

'start

')

time.sleep(30)

print (self.getname()+

'running

')

print (self.getname()+

"" + str(self.num))

print (self.getname()+

'exit

')

mw = myworker(30)

mw.setname(

"myworker

")

mw.start()

print(threading.currentthread().getname())

print(

"all threads:

")

print(

"------------

")

for th 

in threading.enumerate():

print(th.getname())

print(

"------------

")

d.join()

w.join()

mw.join()

print(threading.currentthread().getname())

執行結果如下:

1)python執行緒使用的兩種方法:

**直接呼叫threading.thread來構造thread物件,thread的引數如下:

class threading.thread(group=none, target=none, name=none, args=(), kwargs={})  

group為none;

target為執行緒將要執行的功能函式;

name為執行緒的名字,也可以在物件構造後呼叫setname()來設定;

args為tuple型別的引數,可以為多個,如果只有乙個也的使用tuple的形式傳入,例如(1,);

kwargs為dict型別的引數,也即位命名引數;

**實現自己的threading.thread的子類,需要過載__init__()和run()。

2)threading.thread物件的其他方法:

start(),用來啟動執行緒;

join(), 等待直到執行緒結束;

setdeamon(), 設定執行緒為deamon執行緒,必須在start()呼叫前呼叫,預設為非demon。

注意: python的主線程在沒有非deamon執行緒存在時就會退出。

3)threading的靜態方法:

threading.current_thread() , 用來獲得當前的執行緒;

threading.enumerate() , 用來多的當前存活的所有執行緒;

threading.timer 定時器,其實是thread的乙個字型別,使用如下: 

def hello(): print("hello, world")   

t = timer(30.0, hello) 

t.start()

4)logging是執行緒安全的

logging 模組是執行緒安全的,所以可以使用logging來幫助除錯多執行緒程式。

import logging

logging.basicconfig(level=logging.debug,

format="(%(threadname)-10s : %(message)s", )

logging.debug("wait_for_event_timeout starting") 

完! 

Python 多執行緒庫總結

下面是一些基礎函式,函式包括 函式 threading.active count threading.current thread threading.get ident threading.enumerate threading.main thread threading.settrace fun...

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...

python多執行緒詳解 Python多執行緒詳解

前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...