- 226 Python 如何創(chuàng)建線(xiàn)程
- 227 多線(xiàn)程:交替獲得 CPU 時(shí)間片
- 228 搶奪全局變量出現(xiàn)的場(chǎng)景
- 229 多線(xiàn)程之副作用
- 230 某些場(chǎng)景多線(xiàn)程加鎖后變?yōu)殡u肋
- 231 高效的協(xié)程及案例
- 232 數(shù)數(shù)
Counter
最好用 - 233 說(shuō)說(shuō)死鎖屈暗、
GIL
鎖锁蠕、協(xié)程
226 Python 如何創(chuàng)建線(xiàn)程
創(chuàng)建一個(gè)線(xiàn)程:
import threading
my_thread = threading.Thread()
創(chuàng)建一個(gè)名稱(chēng)為 my_thread 的線(xiàn)程:
my_thread = threading.Thread(name='my_thread')
創(chuàng)建線(xiàn)程,需要告訴這個(gè)線(xiàn)程汗盘,它能幫助我們做什么。
做什么,是通過(guò)參數(shù) target 傳入,參數(shù)類(lèi)型為 callable。
In [49]: def print_i(i):
...: print('打印i:%d'%(i,))
In [50]: my_thread = threading.Thread(target=print_i,args=(1,))
my_thread 線(xiàn)程已全副武裝辈挂,但是衬横,我們得按下發(fā)射按鈕,啟動(dòng) start()终蒂,它才開(kāi)始真正起飛蜂林。
In [52]: my_thread.start()
打印結(jié)果如下,其中 args 指定函數(shù) print_i 需要的參數(shù) i拇泣,類(lèi)型為元組噪叙。
打印
i:1
227 多線(xiàn)程:交替獲得 CPU 時(shí)間片
為了更好解釋?zhuān)俣ㄓ?jì)算機(jī)是單核的,盡管對(duì)于 cpython霉翔,這個(gè)假定有些多余睁蕾。
開(kāi)辟 3 個(gè)線(xiàn)程,裝載到 threads 中:
In [1]: import time
In [3]: import threading
In [14]: def print_time():
...: for _ in range(5): # 在每個(gè)線(xiàn)程中打印 5 次
...: time.sleep(0.1) # 模擬打印前的相關(guān)處理邏輯
...: print('當(dāng)前線(xiàn)程%s,打印結(jié)束時(shí)間為:%s' %(threading.current_thread().getName(
...: ),time.time()))
In [7]: threads = [threading.Thread(name='t%d'%(i,),target=print_time) for i in range(3)]
啟動(dòng) 3 個(gè)線(xiàn)程:
In [8]: [t.start() for t in threads]
Out[8]: [None, None, None]
打印結(jié)果债朵,如下子眶,
當(dāng)前線(xiàn)程t0,打印結(jié)束時(shí)間為:1582761727.4976637
當(dāng)前線(xiàn)程t1,打印結(jié)束時(shí)間為:1582761727.4976637
當(dāng)前線(xiàn)程t2,打印結(jié)束時(shí)間為:1582761727.498664
當(dāng)前線(xiàn)程t0,打印結(jié)束時(shí)間為:1582761727.597949
當(dāng)前線(xiàn)程t1,打印結(jié)束時(shí)間為:1582761727.597949
當(dāng)前線(xiàn)程t2,打印結(jié)束時(shí)間為:1582761727.599801
當(dāng)前線(xiàn)程t1,打印結(jié)束時(shí)間為:1582761727.6984522
當(dāng)前線(xiàn)程t0,打印結(jié)束時(shí)間為:1582761727.6984522
當(dāng)前線(xiàn)程t2,打印結(jié)束時(shí)間為:1582761727.7001588
當(dāng)前線(xiàn)程t1,打印結(jié)束時(shí)間為:1582761727.7988598
當(dāng)前線(xiàn)程t0,打印結(jié)束時(shí)間為:1582761727.7996202
當(dāng)前線(xiàn)程t2,打印結(jié)束時(shí)間為:1582761727.8006535
當(dāng)前線(xiàn)程t1,打印結(jié)束時(shí)間為:1582761727.8994005
當(dāng)前線(xiàn)程t0,打印結(jié)束時(shí)間為:1582761727.900454
當(dāng)前線(xiàn)程t2,打印結(jié)束時(shí)間為:1582761727.9024456
根據(jù)操作系統(tǒng)的調(diào)度算法,t0, t1, t2 三個(gè)線(xiàn)程序芦,輪詢(xún)獲得 CPU 時(shí)間片臭杰。