啟動執行緒
thread.start()
建立執行緒
threading.thread(target)
繼承方式建立
class mythread(threading.thread):
def run(self)
建立鎖mutex = threading.lock()
鎖定mutex.acquire([blocking])
釋放mutex.release()
執行緒區域性變數
threading.local()
#coding=utf-8
import threading
from time import sleep,ctime
def sing():
for i in range(3):
print("正在唱歌...%d"%i)
sleep(1)
def dance():
for i in range(3):
print("正在跳舞...%d"%i)
sleep(1)
if __name__ == '__main__':
print('---開始---:%s'%ctime())
t1 = threading.thread(target=sing)
t2 = threading.thread(target=dance)
t1.start()
t2.start()
while true:
length = len(threading.enumerate())
print('當前執行的執行緒數為:%d'%length)
if length<=1:
break
sleep(0.5)
#coding=utf-8
import threading
import time
class mythread(threading.thread):
def run(self):
for i in range(3):
time.sleep(1)
msg = "i'm "+self.name+' @ '+str(i) #name屬性中儲存的是當前執行緒的名字
print(msg)
if __name__ == '__main__':
t = mythread()
t.start()
#建立鎖
mutex = threading.lock()
#鎖定mutex.acquire([blocking])
#釋放mutex.release()
#encoding=utf-8
import threading
import time
#python3中
# from queue import queue
class producer(threading.thread):
def run(self):
global queue
count = 0
while true:
if queue.qsize() < 1000:
for i in range(100):
count = count +1
msg = '生成產品'+str(count)
queue.put(msg)
print(msg)
time.sleep(0.5)
class consumer(threading.thread):
def run(self):
global queue
while true:
if queue.qsize() > 100:
for i in range(3):
msg = self.name + '消費了 '+queue.get()
print(msg)
time.sleep(1)
if __name__ == '__main__':
queue = queue()
for i in range(500):
queue.put('初始產品'+str(i))
for i in range(2):
p = producer()
p.start()
for i in range(5):
c = consumer()
c.start()
threadlocal的例項代表了乙個執行緒區域性的變數,每條執行緒都只能看到自己的值,並不會意識到其它的執行緒中也存在該變數。
import threading
# 建立全域性threadlocal物件:
local_school = threading.local()
def process_student():
# 獲取當前執行緒關聯的student:
std = local_school.student
print('hello, %s (in %s)' % (std, threading.current_thread().name))
def process_thread(name):
# 繫結threadlocal的student:
local_school.student = name
process_student()
t1 = threading.thread(target= process_thread, args=('dongge',), name='thread-a')
t2 = threading.thread(target= process_thread, args=('老王',), name='thread-b')
t1.start()
t2.start()
t1.join()
t2.join()
Python3併發程式設計之threading模組
建立執行緒物件 threading.thread 引數 引數 描述group none 該類中的待擴充套件引數。target none 目標函式,即被開闢執行緒的執行任務。預設值為none,表示什麼都不執行。name none 該執行緒的名稱。在預設情況下,執行緒的唯一名稱以 thread n 的形...
Python3多執行緒程式設計
多執行緒使用,可以讓乙個執行緒訪問某個資源,其他執行緒給他通過queue發任務,這樣避免對共享的資源編寫繁瑣的加鎖解鎖 threading包也提供了 locks,events,condition variables,and semaphores這些工具,可以做多執行緒間的資源共享.python有乙個...
Python3多執行緒程式設計
使用多執行緒還是使用多程序,怎麼樣來控制防止執行緒太多,導致執行緒失控,就是請求乙個任務,生成乙個程序,最終導致程序暴漲,進而無法控制。所以,對於任務數量一直在增加的程式,固定執行緒數量的執行緒池是必要的。一些說明 最佳執行緒數的獲取 對於io密集型模型 usr bin env python3 co...