day 20 多線程

一、多線程

每個(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)庫(kù)來支持多線程
"""

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

三、server

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è)請(qǐng)求對(duì)應(yīng)的子線程
        t = ConversationThread(conversation, addr)
        t.start()



if __name__ == '__main__':
    creat_server()

四、client

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)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 線程 操作系統(tǒng)線程理論 線程概念的引入背景 進(jìn)程 之前我們已經(jīng)了解了操作系統(tǒng)中進(jìn)程的概念,程序并不能單獨(dú)運(yùn)行,只有...
    go以恒閱讀 1,795評(píng)論 0 6
  • 進(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,257評(píng)論 0 23
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,213評(píng)論 0 9
  • 索引是用來快速檢索出具有特定值的記錄。如果沒有索引,數(shù)據(jù)庫(kù)就必須從第一條記錄開始進(jìn)行全表掃描,直到找出相關(guān)的行。數(shù)...
    咕泡學(xué)院蓉蓉老師閱讀 529評(píng)論 0 2
  • 又到清明二月天, 思鄉(xiāng)島燕夢(mèng)難圓。 狂濤欲斷回歸路, 敢問誰(shuí)能忘祖先?
    筆名江風(fēng)閱讀 291評(píng)論 2 5

友情鏈接更多精彩內(nèi)容