day19總結(jié)-多線程

網(wǎng)絡(luò)編程

1.socket

socket又叫套接字巧涧,指的是網(wǎng)絡(luò)通信的兩端酪刀,分別是服務(wù)器和客戶端

socket編程指的就是通過代碼實現(xiàn)客戶端和服務(wù)器之間的通信

2.服務(wù)器的實現(xiàn)

2.1創(chuàng)建套接字對象

server = socket.socket()

參數(shù)說明:

family:ip類型笤受,AF_INET -> IPv4歉眷,AF_INET6 -> IPv6

type:傳輸協(xié)議類型,SOCK_STREAM ->TCP,SOCK_DGRAM ->UDP

2.2綁定IP地址和端口

bind((ip地址,端口號))

ip用來區(qū)分互聯(lián)網(wǎng)上設(shè)備

端口是用來區(qū)分一臺計算機上的不同服務(wù)(應(yīng)用),端口范圍是0-65535辉阶,其中0-1024是著名端口,選擇端口時用其他端口

server.bind(('10.7.190.164',8080))

2.3啟動服務(wù)器(監(jiān)聽請求)

listen(數(shù)量) --數(shù)量指的是一次性能夠處理的最大請求數(shù)

server.listen(255)

2.4讓服務(wù)器一直處于運行狀態(tài)

while True:
    print('開始監(jiān)聽...')
    connect,addr = server.accept()       #等待客戶端的請求瘩扼,程序運行到這里會停下(類似input)睛藻,等到有客戶端來連接服務(wù)器,才會接著往后執(zhí)行
    print(connect,addr)
    #send(數(shù)據(jù))   --發(fā)送數(shù)據(jù)邢隧,數(shù)據(jù)是二進制數(shù)據(jù)
    message = input('>>>')
    connect.send(message.encode(encoding='utf-8'))
    #recv(字節(jié)數(shù))  --接收數(shù)據(jù),并且指定一次性接收的數(shù)據(jù)的大小的最大值冈在;返回接收到的二進制數(shù)據(jù)倒慧,程序運行到這里也會停下,直到客戶端給服務(wù)器發(fā)送消息后才會接著往后執(zhí)行包券。
    data = connect.recv(1024)
    print('<<<')
    print(data.decode(encoding='utf-8'))
    connect.close()

3.客戶端的實現(xiàn)

3.1創(chuàng)建套接字對象

client = socket.socket()

3.2連接服務(wù)器

connect((ip地址纫谅,端口))

client.connect(('10.7.190.164',8080)) #要連接的服務(wù)器ip和端口,客戶端發(fā)送消息端口是隨機的,但可以指定溅固。

3.3接收消息

data = client.recv(1024)

print('<<<<')

print(data.decode(encoding='utf-8'))

3.4發(fā)送消息

message = input('>>>')

client.send(message.encode(encoding='utf-8'))

client.close()

4.網(wǎng)絡(luò)請求

根據(jù)網(wǎng)絡(luò)接口請求數(shù)據(jù):通過第三方庫requests提供的方法

import requests

response = requests.get('網(wǎng)絡(luò)地址')

response.text #獲取字符串形式的數(shù)據(jù)結(jié)果

response.content #獲取二進制數(shù)據(jù)

response.json() #函數(shù)付秕,獲取json數(shù)據(jù)并轉(zhuǎn)換為對應(yīng)的python數(shù)據(jù)類型


多線程

1.什么是進程

一個正在運行的應(yīng)用程序就是一個進程,系統(tǒng)會給每個進程分配一個獨立的內(nèi)存區(qū)域侍郭,用來保存程序運行過程中產(chǎn)生的數(shù)據(jù)询吴,當(dāng)進程結(jié)束的時候,這個內(nèi)存區(qū)域會自動銷毀亮元。

2.什么是線程

進程想要執(zhí)行任務(wù)就必須要有線程猛计。每個進程都默認(rèn)有一個線程,這個線程叫主線程爆捞,其他的線程叫子線程奉瘤。程序任務(wù)都是默認(rèn)在主線程中執(zhí)行的。

一個線程中執(zhí)行多個任務(wù)煮甥,任務(wù)是串行執(zhí)行的(一個一個按順序執(zhí)行)

一個進程中如果有多個線程盗温,多線程執(zhí)行不同任務(wù)的時候是并行(同時執(zhí)行藕赞,實質(zhì)是假象,是cpu在不同線程間來回調(diào)度)

3.python中怎么使用多線程

python通過內(nèi)置的threading模塊來提供多線程相關(guān)技術(shù)卖局;

其中有一個Thread類斧蜕,這個類的對象就是線程對象。

def download(film):

    print('開始下載: %s  time: %s' % (film, str(datetime.now())))

    sleep(15)
    print('%s下載完成  time:%s' % (film, str(datetime.now())))
    print(threading.current_thread())

# 在主線程中下載兩個電影: 一個一個的下載吼驶,一個下載完才下載另一個惩激,總耗時兩個電影耗時之和
# download('戀戀筆記本')
# download('摔跤吧爸爸')

# 1.直接創(chuàng)建線程類的對象
"""
a.語法:
線程對象 = Thread(target=函數(shù), args=參數(shù))   -  創(chuàng)建一個線程對象,并且返回蟹演。

b.說明
函數(shù) - function類型的變量; 這個函數(shù)的函數(shù)體就會在子線程中執(zhí)行
參數(shù) - 元祖; 參數(shù)會傳給target對應(yīng)的函數(shù)

"""
t1 = threading.Thread(target=download, args=('大國崛起',))
t2 = threading.Thread(target=download, args=('霸王別姬',))

# 2.讓線程開始執(zhí)行任務(wù)
"""
線程對象.start()   -   開始執(zhí)行子線程中的任務(wù)
"""
t1.start()
t2.start()
download('變形金剛')
print('=======')
# 某個線程出現(xiàn)異常风钻,是線程直接結(jié)束;進程不一定結(jié)束酒请,所有的線程都結(jié)束骡技,進程才會結(jié)束
print([1, 2][10])
print('+++++++++++')

3.1直接創(chuàng)建線程類對象

語法:

import threading

線程對象 = threading.Thread(target=函數(shù),args=參數(shù)) -創(chuàng)建一個線程對象,并返回

說明:

函數(shù) -function類型的變量羞反,這個函數(shù)的函數(shù)體就會在子線程中執(zhí)行

參數(shù) -元祖布朦,參數(shù)會傳給target對應(yīng)的函數(shù)

讓線程開始執(zhí)行任務(wù):

線程對象.start() --開始執(zhí)行子線程中的任務(wù)

當(dāng)某個線程出現(xiàn)異常,是線程直接結(jié)束昼窗,進程不一定結(jié)束是趴,只有所有的線程都結(jié)束,進程才結(jié)束

threading.current_thread()

3.2創(chuàng)建線程子類

  1. 聲明一個類繼承threading模塊的Thread類
  2. 重寫run()方法澄惊,這個方法中的任務(wù)就是需要在子線程中執(zhí)行的任務(wù)
  3. 創(chuàng)建當(dāng)前類的對象唆途,就是線程對象
  4. 啟動線程(還是通過start()調(diào)用)
from threading import Thread,current_thread
class DownLoadThread(Thread):
    def __init__(self,film):
        super().__init__()
        self.film = film
    def run(self):
        print('下載電影:%s  %s',% (self.film,current_thread()))
t1 = DownLoadThread()
t1.start() #線程對象調(diào)用start會自動在子線程中去調(diào)用run方法
#t1.run()  這個也可以,但是是在主線程中執(zhí)行因此沒有意義

3.3 join的用法

線程對象.join() --程序執(zhí)行到這個地方會停下來(線程阻塞)掸驱,直到線程對象中的任務(wù)執(zhí)行完成后才繼續(xù)執(zhí)行后面的語句

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肛搬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子毕贼,更是在濱河造成了極大的恐慌温赔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鬼癣,死亡現(xiàn)場離奇詭異陶贼,居然都是意外死亡,警方通過查閱死者的電腦和手機待秃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門骇窍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锥余,你說我怎么就攤上這事腹纳。” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵嘲恍,是天一觀的道長足画。 經(jīng)常有香客問我,道長佃牛,這世上最難降的妖魔是什么淹辞? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮俘侠,結(jié)果婚禮上象缀,老公的妹妹穿的比我還像新娘。我一直安慰自己爷速,他們只是感情好央星,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惫东,像睡著了一般莉给。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廉沮,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天颓遏,我揣著相機與錄音,去河邊找鬼滞时。 笑死叁幢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坪稽。 我是一名探鬼主播遥皂,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刽漂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弟孟,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤贝咙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拂募,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庭猩,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年陈症,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔼水。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡录肯,死狀恐怖趴腋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤优炬,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布颁井,位于F島的核電站,受9級特大地震影響蠢护,放射性物質(zhì)發(fā)生泄漏雅宾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一葵硕、第九天 我趴在偏房一處隱蔽的房頂上張望眉抬。 院中可真熱鬧,春花似錦懈凹、人聲如沸蜀变。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昏苏。三九已至,卻和暖如春威沫,著一層夾襖步出監(jiān)牢的瞬間贤惯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工棒掠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孵构,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓烟很,卻偏偏與公主長得像颈墅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雾袱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 01.recode 一個進程默認(rèn)有一個線程恤筛,這個線程叫主線程。默認(rèn)情況下芹橡,所有的代碼都是在主線程中執(zhí)行的 開始下載...
    Gary134閱讀 119評論 0 0
  • 線程 操作系統(tǒng)線程理論 線程概念的引入背景 進程 之前我們已經(jīng)了解了操作系統(tǒng)中進程的概念林说,程序并不能單獨運行煎殷,只有...
    go以恒閱讀 1,635評論 0 6
  • 一. 操作系統(tǒng)概念 操作系統(tǒng)位于底層硬件與應(yīng)用軟件之間的一層.工作方式: 向下管理硬件,向上提供接口.操作系統(tǒng)進行...
    月亮是我踢彎得閱讀 5,959評論 3 28
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,723評論 0 10
  • 紫玉蘭開花 秋風(fēng)凍雨枯葉闌腿箩,雪壓細(xì)枝孤苞寒豪直。 靜待春回吹暖氣,始露嬌容著紫衫珠移。
    蟹夾水草閱讀 309評論 0 0