套接字與多線程

socket(套接字)

1.什么是socket:
socket又叫套接字梳凛, 指的是網(wǎng)絡(luò)通信的兩端吵取,分別是服務(wù)器和客戶端
socket編程指的就是通過代碼實現(xiàn)客戶端和服務(wù)器之間的通信

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

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

"""
family: ip類型, AF_INET -> ipv4男韧,  AF_INET6 -> ipv6 
type: 傳輸協(xié)議的類型, SOCK_STREAM -> TCP,   SOCK_DGRAM -> UDP

"""
import socket
server = socket.socket()

2.綁定IP地址和端口

"""
ip用來區(qū)分互聯(lián)網(wǎng)上設(shè)備
端口是用來區(qū)分一臺計算上的不同的服務(wù)(應(yīng)用),值是0-65535,其中0-1024是著名端口舔腾。其他的隨便選


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

"""
server.bind(('10.7.190.127', 8081))

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

"""

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

"""
server.listen(255)

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

while True:
    print('開始監(jiān)聽....')
    # 5.等待客戶端的請求
    # 程序運行到這個地方,會停下來搂擦,等到有客戶端來連接服務(wù)器稳诚,才會接著往后執(zhí)行
    connect, addr = server.accept()
    print(connect, addr)
     # 6.發(fā)送消息
    """
    send(數(shù)據(jù))     -  發(fā)送數(shù)據(jù),數(shù)據(jù)是二進制數(shù)據(jù)
    """
    message = input('>>>')
    connect.send(message.encode(encoding='utf-8'))

    # 7.接收消息
    """
    recv(字節(jié)數(shù))   - 接收數(shù)據(jù),并且指定一次性接收的數(shù)據(jù)的大小的最大值瀑踢;返回接收到的二進制數(shù)據(jù)
    """
    # 程序運行到這個地方會停下來扳还,直到客戶端給服務(wù)器發(fā)送消息,才會接著執(zhí)行
    data = connect.recv(1024)
    print('<<<:')
    print(data.decode(encoding='utf-8'))

    # 8.關(guān)閉連接
    connect.close()

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

創(chuàng)建客戶端套接字:


# 1.創(chuàng)建套接字對象
client = socket.socket()

# 2.連接服務(wù)器
"""
套接字對象.connect((ip地址, 端口))
"""
client.connect(('10.7.190.127', 8080))

# 3.接收消息
data = client.recv(1024)
print('<<<:')
print(data.decode(encoding='utf-8'))

# 4.發(fā)送消息
message = input('>>>:')
client.send(message.encode(encoding='utf-8'))

# 5.關(guān)閉連接
client.close()

requests庫

import requests

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

# 1.獲取網(wǎng)絡(luò)數(shù)據(jù)
response = requests.get('http://wimg.spriteapp.cn/profile/large/2017/10/05/59d644960c99b_mini.jpg')
print(response) 

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

# 2)獲取二進制數(shù)據(jù)
data = response.content
print(type(data), data)
with open('img.jpg', 'wb') as f:
    f.write(data)

# 3)獲取json數(shù)據(jù)
# message = response.json()(把獲取到的json數(shù)據(jù)轉(zhuǎn)換為python數(shù)據(jù))
# print(type(message), message)
# print(message['data'])

多線程

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

2.什么是線程:

  • 進程想要執(zhí)行任務(wù)俏让,就必須要有線程。每個進程默認都有一個線程茬暇,這個線程叫主線程首昔;其他的線程叫子線程,程序默認都是在主線程中執(zhí)行的糙俗;
  • 一個線程中執(zhí)行多個任務(wù)勒奇,任務(wù)是串行執(zhí)行的(一個一個的按順序執(zhí)行)
  • 一個進程中如果有多個線程,多線程執(zhí)行不同任務(wù)的時候是并行(同時執(zhí)行)

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('+++++++++++')

創(chuàng)建線程子類(推薦)

"""
1)聲明一個類繼承自Thread
2)重寫run方法扼仲,這個方法中的任務(wù)就是需要在子線程中執(zhí)行的任務(wù)
3)創(chuàng)建當(dāng)前類的對象远寸,就是線程對象
4)啟動子線程

"""
class DownloadThread(Thread):
    def __init__(self, film):
        super().__init__()
        self.film = film

    def run(self):
        print('%s開始下載...' % self.film)
        time1 = randint(3, 10)
        time.sleep(time1)
        print('%s下載結(jié)束抄淑,總耗時%d秒' % (self.film, time1))


# 2.創(chuàng)建線程對象
t1 = DownloadThread('霸王別姬')
t2 = DownloadThread('海賊王')
# 3.啟動線程
"""
線程對象調(diào)用start會自動在子線程中去調(diào)用run方法
直接用線程對象調(diào)用run方法,run方法會在主線程中執(zhí)行
"""
start = time.time()
t1.start()
t2.start()


# 4.join的用法
"""
線程對象.join()    --  程序執(zhí)行到這個地方會停下來(線程會阻塞)驰后,直到線程對象中的任務(wù)執(zhí)行完成后才執(zhí)行后面的語句
"""
t1.join()
t2.join()
# print('t1結(jié)束')
end = time.time()
print('總時間: ', end - start)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肆资,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子灶芝,更是在濱河造成了極大的恐慌郑原,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夜涕,死亡現(xiàn)場離奇詭異犯犁,居然都是意外死亡,警方通過查閱死者的電腦和手機女器,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門酸役,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驾胆,你說我怎么就攤上這事涣澡。” “怎么了丧诺?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵入桂,是天一觀的道長。 經(jīng)常有香客問我锅必,道長事格,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任搞隐,我火速辦了婚禮驹愚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劣纲。我一直安慰自己逢捺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布癞季。 她就那樣靜靜地躺著劫瞳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绷柒。 梳的紋絲不亂的頭發(fā)上志于,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音废睦,去河邊找鬼伺绽。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奈应。 我是一名探鬼主播较雕,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼跃脊,長吁一口氣:“原來是場噩夢啊……” “哼蠢沿!你這毒婦竟也來了垮抗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惩妇,失蹤者是張志新(化名)和其女友劉穎株汉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屿附,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡郎逃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挺份。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡贮懈,死狀恐怖匀泊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朵你,我是刑警寧澤各聘,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站抡医,受9級特大地震影響躲因,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忌傻,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一大脉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧水孩,春花似錦镰矿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宙刘,卻和暖如春苍姜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悬包。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工衙猪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓屈嗤,卻偏偏與公主長得像潘拨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饶号,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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

  • 第一章 引言和網(wǎng)絡(luò)編程基礎(chǔ)知識 1.1 分別簡述OSI參考模型和TCP/IP模型铁追,并闡述他們之間的對應(yīng)關(guān)系 1.2...
    V0W閱讀 5,334評論 0 9
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,359評論 0 35
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,109評論 1 32
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理茫船。運行時機制的原理和運用場景琅束。SDWebImage的原...
    LZM輪回閱讀 2,009評論 0 12
  • 世人不過萬三天, 情愛之間不必傷算谈。 去者無心皆不留涩禀, 緣起天下總成雙。
    水電快修閱讀 310評論 0 1