python多執行緒函式 Python多執行緒

2021-10-12 11:00:06 字數 3411 閱讀 7242

python使用多執行緒有兩種方式:

函式或者用類來包裝執行緒物件

函式式:呼叫thread模組中的start_new_thread()函式來產生新執行緒

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

function:執行緒函式

args:執行緒引數,必須是tuple型別

kwargs:可選引數

執行緒模組:

python提供兩個標準庫thread和threading對執行緒的支援

thread提供了低級別、原始的執行緒以及乙個簡單的鎖

threading模組提供的其他方法:

threading.currentthread():

threading.enumerate():

threading.activecount():

執行緒模組thread類也可以處理執行緒,提供方法:

run():

start():

join([time]):

isalive():

getname():

setname():

執行緒鎖:

使用thread物件的lock和rlock可以實現簡單的執行緒同步

這兩個物件都有acquire方法和release方法,

例項:#!/usr/bin/python#-*- coding: utf-8 -*-

importthreadingimporttimeclassmythread (threading.thread):def __init__(self, threadid, name, counter):

threading.thread.__init__(self)

self.threadid=threadid

self.name=name

self.counter=counterdefrun(self):print "starting" +self.name#獲得鎖,成功獲得鎖定後返回true

#可選的timeout引數不填時將一直阻塞直到獲得鎖定

#否則超時後將返回false

threadlock.acquire()

print_time(self.name, self.counter,3)#釋放鎖

threadlock.release()defprint_time(threadname, delay, counter):whilecounter:

time.sleep(delay)print "%s: %s" %(threadname, time.ctime(time.time()))

counter-= 1threadlock=threading.lock()

threads=#建立新執行緒

thread1 = mythread(1, "thread-1", 1)

thread2= mythread(2, "thread-2", 2)#開啟新執行緒

thread1.start()

thread2.start()#新增執行緒到執行緒列表

for t inthreads:

t.join()print "exiting main thread"

執行緒優先順序佇列queue

queue模組提供了同步的、執行緒安全的佇列類

實現了鎖,能夠在多執行緒中直接使用,可以使用佇列來實現執行緒間同步

queue模組中的常用方法:

queue.qsize() 返回佇列的大小

queue.empty() 如果隊列為空,返回true,反之false

queue.full() 如果佇列滿了,返回true,反之false

queue.full 與 maxsize 大小對應

queue.get([block[, timeout]])獲取佇列,timeout等待時間

queue.get_nowait() 相當queue.get(false)

queue.put(item) 寫入佇列,timeout等待時間

queue.put_nowait(item) 相當queue.put(item, false)

queue.task_done() 在完成一項工作之後,queue.task_done()函式向任務已經完成的佇列傳送乙個訊號

queue.join() 實際上意味著等到隊列為空,再執行別的操作

例項:#!/usr/bin/python#-*- coding: utf-8 -*-

importqueueimportthreadingimporttime

exitflag=0classmythread (threading.thread):def __init__(self, threadid, name, q):

threading.thread.__init__(self)

self.threadid=threadid

self.name=name

self.q=qdefrun(self):print "starting" +self.name

process_data(self.name, self.q)print "exiting" +self.namedefprocess_data(threadname, q):while notexitflag:

queuelock.acquire()if notworkqueue.empty():

data=q.get()

queuelock.release()print "%s processing %s" %(threadname, data)else:

queuelock.release()

time.sleep(1)

threadlist= ["thread-1", "thread-2", "thread-3"]

namelist= ["one", "two", "three", "four", "five"]

queuelock=threading.lock()

workqueue= queue.queue(10)

threads=

threadid= 1

#建立新執行緒

for tname inthreadlist:

thread=mythread(threadid, tname, workqueue)

thread.start()

threadid+= 1

#填充佇列

queuelock.acquire()for word innamelist:

workqueue.put(word)

queuelock.release()#等待佇列清空

while notworkqueue.empty():pass

#通知執行緒是時候退出

exitflag = 1

#等待所有執行緒完成

for t inthreads:

t.join()print "exiting main thread"

python多執行緒 python多執行緒

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

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

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

python程式多執行緒 PYTHON多執行緒

在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...