今天主要學習了多線程和計算機網絡基礎
多線程
- 調用:from threading import Thread
多進程的調用:from multiprocessing import Process,
使用多進程的時機: 入股哦多個任務之間沒有任何的關聯(獨立子任務)而且希望利用好CPU的多核特性,那么我們推薦使用多進程徒溪。
- 使用方法:run(): 用以表示線程活動的方法优炬。
start():啟動線程活動授嘀。
join([time]): 等待至線程中止旷赖。這阻塞調用線程直至線程的join() 方法被調用中止-正常退出或者拋出未處理的異常-或者是可選的超時發(fā)生寞宫。 - 多線程的保護:#當多個線程同時訪問一個資源的時候供炼,就有可能因為競爭資源導致資源的狀態(tài)錯誤;被多個線程訪問的資源我們通常稱之為臨界資源涨薪,對臨界資源的訪問需要加上保護骑素,我們使用鎖進行操作。
if money > 0:
self._lock.acquire() # 獲得鎖
try:
new_balance = self._balance + money
time.sleep(0.01)
self._balance = new_balance
finally:
self._lock.release()
實例
import time
from random import randint
from threading import Thread
class Download(Thread):
def __init__(self, filenname):
self._filename = filenname
super().__init__()
# 鉤子函數/回調函數(callback)
# 知道這個事刚夺,但是不知道事情什么時候會真正的觸發(fā)
# 啟動線程只能調用start献丑,而不能直接調用run
def run(self):
download(self._filename)
def download(filename):
print('開始下在%s文件' % filename)
delay = randint(1, 5)
time.sleep(delay)
print('下載完成%s, 用時%d秒' % (filename, delay))
def main():
# 多線程的寫法
start = time.time()
t1 = Download('puthon從入門到住院')
t1.start()
t2 = Download('誅仙')
t2.start()
t1.join()
t2.join()
# p1 = Process(target=download, args=('python從入門到住院。pdf', )) #多進程的寫法
# p1.start()
# p2 = Process(target=download, args=('peking hot', ))
# p2.start()
# p1.join() # 等待進程結束(新方法)
# p2.join()
end = time.time()
print('總共用了多少%d秒' % (end - start))
if __name__ == '__main__':
main()