python 3コアプログラミングスレッド
3242 ワード
文書ディレクトリ API コールバック方式作成スレッド 継承方式作成スレッド 反発ロック 生産者と消費者モデル ThreadLocal
API
スレッドを開始するstart()
スレッドの作成Thread(target)
継承の作成
class MyThread(threading.Thread): def run(self)
ロックmutex=threadingを作成する.Lock()
mutexをロックします.acquire([blocking])
放出するrelease()
スレッドローカル変数threading.local()
コールバック方式によるスレッドの作成
継承によるスレッドの作成
反発ロック
生産者と消費者モデル
ThreadLocal
ThreadLocalのインスタンスは、スレッドのローカル変数を表し、各スレッドには独自の値しか表示されず、他のスレッドにも存在することを意識しません.
API
スレッドを開始するstart()
スレッドの作成Thread(target)
継承の作成
class MyThread(threading.Thread): def run(self)
ロックmutex=threadingを作成する.Lock()
mutexをロックします.acquire([blocking])
放出する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
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()