python3核心程式設計之執行緒

2021-09-20 02:45:18 字數 3005 閱讀 1082

啟動執行緒

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...