Day19_線程

一斗塘、多線程

每個(gè)程序在運(yùn)行的時(shí)候(進(jìn)程)系統(tǒng)都會(huì)為這個(gè)進(jìn)程創(chuàng)建一個(gè)線程赢织,這個(gè)線程我們叫主線程。
程序員自己創(chuàng)建的線程叫子線程

多個(gè)任務(wù)在一個(gè)線程中是按順序一個(gè)一個(gè)執(zhí)行的(線程的串行)

多個(gè)線程的任務(wù)同時(shí)執(zhí)行

import time
import datetime
from random import randint
import threading


def download(file):
    print(file,threading.current_thread())
    print(datetime.datetime.now(),'開始下載:%s' % file)

    # sleep(時(shí)間): 會(huì)將當(dāng)前線程阻塞指定的時(shí)間(停指定的時(shí)間然后再往后執(zhí)行)
    # 時(shí)間單位:秒
    time1 = randint(5, 10)
    time.sleep(time1)

    print(datetime.datetime.now(),'下載%s結(jié)束'%file,'總共耗時(shí):%d' % time1)


"""
python通過threading標(biāo)準(zhǔn)庫來支持多線程
"""

if __name__ == '__main__':

    # download('肖生克的救贖')
    # current_thread()獲取當(dāng)前線程
    print(threading.current_thread())

    # 1.創(chuàng)建一個(gè)線程對(duì)象
    """
    Thread(target=, args=)
    target: 需要傳一個(gè)需要在子線程中執(zhí)行的函數(shù)(類型是function的變量)
    agrs: 在子線程中調(diào)用target對(duì)應(yīng)的函數(shù)的時(shí)候于置,該傳什么參數(shù)八毯。類型是元祖
    """
    t1 = threading.Thread(target=download, args=('阿甘正傳',))
    t2 = threading.Thread(target=download, args=('肖生克的救贖',))

    # 2.讓子線程去執(zhí)行任務(wù)
    t1.start()
    t2.start()

    print('===========')

二瞄桨、創(chuàng)建線程

from threading import Thread,current_thread
import time
from datetime import datetime

"""

創(chuàng)建線程方式1:

直接通過Thread類創(chuàng)建對(duì)象,將需要在子線程中執(zhí)行的函數(shù)作為target參數(shù)傳進(jìn)去

創(chuàng)建線程方式2:

  • a.寫一個(gè)自己的類去繼承Thread類
  • b.重寫當(dāng)前類的run方法芯侥,run中的任務(wù)就是在子線程中執(zhí)行的任務(wù)
  • c.創(chuàng)建當(dāng)前類的對(duì)象, 就是線程對(duì)象。然后調(diào)用start去執(zhí)行線程中任務(wù)
    """

1.創(chuàng)建線程類

class DownLoadThread(Thread):

    """下載線程類"""
    def __init__(self, file):
        super().__init__()
        self.file = file

    def run(self):
        # 注意:如果需要給run方法中傳數(shù)據(jù)廓俭,通過當(dāng)前類的屬性來傳
        print('%s開始下載:' % self.file, datetime.now())
        time.sleep(5)
        print('%s下載結(jié)束:' % self.file, datetime.now())

2.創(chuàng)建線程對(duì)象

t1 = DownLoadThread('阿甘正傳')
t2 = DownLoadThread('沉默的羔羊')

3.通過start去執(zhí)行run中的任務(wù)

"""
注意: 如果直接調(diào)用run方法唉工,run方法中的任務(wù)不會(huì)在當(dāng)前的子線程中執(zhí)行

# t1.run()
t1.start()
t2.start()

三、多線程聊天的服務(wù)器

"""__author__ = 余婷"""

import socket
from threading import Thread


class ConversationThread(Thread):
    def __init__(self, conversation: socket.socket, addr):
        super().__init__()
        self.conversation = conversation
        self.addr = addr

    def run(self):
        # 保持通話
        while True:
            # 接收消息
            message_re = self.conversation.recv(1024).decode('utf-8')
            print(self.addr[0], ':', message_re)

            # 發(fā)送消息
            message = 'hi %s雹熬,你好!' % self.addr[0]
            self.conversation.send(message.encode('utf-8'))



def creat_server():
    server = socket.socket()
    server.bind(('10.7.156.97', 8081))
    server.listen(512)

    # 讓服務(wù)器一直運(yùn)行
    while True:
        # 會(huì)阻塞線程
        conversation, addr = server.accept()

        # 創(chuàng)建處理這個(gè)請求對(duì)應(yīng)的子線程
        t = ConversationThread(conversation, addr)
        t.start()



if __name__ == '__main__':
    creat_server()

四、客戶端

"""__author__ = 余婷"""

import socket

client = socket.socket()
client.connect(('10.7.156.97', 8081))

while True:
    message = input('>>>')
    client.send(message.encode('utf-8'))

    message_re = client.recv(1024).decode('utf-8')
    print(message_re)

五竿报、發(fā)送服務(wù)器

"""__author__ = 余婷"""
import socket

server = socket.socket()
server.bind(('10.7.156.97', 8082))
server.listen(512)

while True:
    conversation, addr = server.accept()

    message_re = conversation.recv(1024).decode('utf-8')

    if message_re == '1':
        # 發(fā)送圖片
        print('發(fā)送圖片')
        with open('./files/luffy.jpeg', 'br') as f:
            content = f.read()
            conversation.send(content)  # 發(fā)送圖片信息
            conversation.close()
    elif message_re == '2':
        message = input('>>>')
        conversation.send(message.encode('utf-8'))
        conversation.close()

六、接收圖片文字客戶端

"""__author__ = 余婷"""

import socket

number = 0

page = """
===========================
1. 需要圖片
2. 需要文字
3. 通知結(jié)束
==========================="""

while True:
    client = socket.socket()
    client.connect(('10.7.156.97', 8082))
    print(page)
    value = input('請選擇(1-3):')

    # 發(fā)送數(shù)據(jù)
    client.send(value.encode('utf-8'))

    # 接收服務(wù)器返回的數(shù)據(jù)
    if value == '1':
        data = bytes()
        message_re = client.recv(1024)
        while message_re:
            print('接收到圖片')
            data += message_re
            message_re = client.recv(1024)

        # 關(guān)閉連接
        client.close()
        number += 1
        with open('./new%d.jpeg'%number, 'wb') as f:
            f.write(data)

    elif value == '2':
        message_re = client.recv(1024)
        print(message_re.decode('utf-8'))
        # client.close()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末犬庇,一起剝皮案震驚了整個(gè)濱河市僧界,隨后出現(xiàn)的幾起案子臭挽,更是在濱河造成了極大的恐慌,老刑警劉巖葬荷,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纽帖,死亡現(xiàn)場離奇詭異,居然都是意外死亡懊直,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門雕崩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盼铁,你說我怎么就攤上這事尝偎。” “怎么了致扯?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長醒陆。 經(jīng)常有香客問我,道長刨摩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任澡刹,我火速辦了婚禮,結(jié)果婚禮上陆赋,老公的妹妹穿的比我還像新娘。我一直安慰自己嚷闭,他們只是感情好魂务,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗅榕,像睡著了一般顺饮。 火紅的嫁衣襯著肌膚如雪兼雄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天赦肋,我揣著相機(jī)與錄音嘲碱,去河邊找鬼。 笑死麦锯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹅巍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼骆捧,長吁一口氣:“原來是場噩夢啊……” “哼髓绽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起顺呕,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤括饶,失蹤者是張志新(化名)和其女友劉穎图焰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹦掐,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卧抗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了超陆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺弹。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡张漂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出航攒,到底是詐尸還是另有隱情,我是刑警寧澤漠畜,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站憔狞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拍冠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一庆杜、第九天 我趴在偏房一處隱蔽的房頂上張望碟摆。 院中可真熱鬧,春花似錦典蜕、人聲如沸雏逾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仇让,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丧叽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工踊淳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陕靠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓垄开,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溉躲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對(duì)應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過程中...
    勝浩_ae28閱讀 5,117評(píng)論 0 23
  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對(duì)應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過程中...
    小徐andorid閱讀 2,814評(píng)論 3 53
  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記,整理的知識(shí)點(diǎn)疑枯,也是為了防止忘記,尊重勞動(dòng)成果神汹,轉(zhuǎn)載注明出處哦!如果你也喜歡屁魏,那...
    波波波先森閱讀 11,273評(píng)論 4 56
  • ??一個(gè)任務(wù)通常就是一個(gè)程序捉腥,每個(gè)運(yùn)行中的程序就是一個(gè)進(jìn)程。當(dāng)一個(gè)程序運(yùn)行時(shí),內(nèi)部可能包含了多個(gè)順序執(zhí)行流桃漾,每個(gè)順...
    OmaiMoon閱讀 1,680評(píng)論 0 12
  • https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417...
    twilight_mao閱讀 188評(píng)論 0 0