Day20-多線程

一、多線程

每個程序在運行的時候系統(tǒng)都會為這個進(jìn)程創(chuàng)建一個線程,這個線程我們叫主線程
程序員自己創(chuàng)建除線程我們叫子線程
程序員自己創(chuàng)建的線程叫子線程

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

import time
import datetime
from random import randint
import threading


def download(file):
    print(datetime.datetime.now(), '開始下載,%s' % file)
    # sleep(時間):將當(dāng)前線程阻塞指定的時間
    # 時間單位:秒
    time.sleep(randint(5, 10))
    print(datetime.datetime.now(), '下載%s結(jié)束' % file)


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

if __name__ == '__main__':
    """
    Thread(target= , args=)
    target : 傳一個需要在子線程中執(zhí)行函數(shù)(類型是function的變量)
    args: 在子線程中調(diào)用target對應(yīng)函數(shù)的時候,該傳什么參數(shù)
    """
    # current_thread()獲取當(dāng)前線程
    t1 = threading.Thread(target=download, args=('阿甘正傳',))
    t1.start()
    t2 = threading.Thread(target=download, args=('救贖',))
    t2.start()

二、創(chuàng)建進(jìn)程的方式

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

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

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

a.自己寫一個類去繼承Thrad類
b.重寫實現(xiàn)類的run方法,run中的任務(wù)就是在子線程中執(zhí)行的任務(wù)
c.創(chuàng)建當(dāng)前類的對象,就是線程對象.然后調(diào)用start去執(zhí)行線程中任務(wù)
from threading import Thread
import datetime
from time import sleep

# 創(chuàng)建線程類
class DownLoadThread(Thread):
    """下載線程類"""

    def __init__(self, file):
        super().__init__()
        self.file = file

    def run(self):
        print('%s開始下載, ' % self.file, datetime.datetime.now())
        sleep(5)
        print('%s下載結(jié)束, ' % self.file, datetime.datetime.now())


# 創(chuàng)建線程對象
t1 = DownLoadThread('火影忍者')
t2 = DownLoadThread('進(jìn)擊的巨人')
# 通過start去執(zhí)行run中任務(wù)
t1.start()
t2.start()

三、多線程的服務(wù)器與客戶端

服務(wù)器代碼

import socket
from threading import Thread


class Onlien(Thread):
    def __init__(self, conversation: socket.socket, add):
        super().__init__()
        self.conversation = conversation
        self.add = add

    def run(self):
        while True:
            message_re = self.conversation.recv(1024).decode('utf-8')
            print(self.add[0], ':', message_re)
            self.conversation.send('你好!你好'.encode('utf-8'))


def creat_server():
    server = socket.socket()
    server.bind(('10.7.156.86', 8080))
    server.listen(512)
    while True:
        conversation, add = server.accept()
        # 創(chuàng)建處理這個請求對應(yīng)的子線程
        t = Onlien(conversation, add)
        t.start()


if __name__ == '__main__':
    creat_server()

客戶端代碼

import socket
client = socket.socket()
client.connect(('10.7.156.97', 8081))
while True:
    message = input('>>>')
    client.send(message.encode('utf-8'))
    print(client.recv(1024).decode())
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 進(jìn)程和線程 進(jìn)程 所有運行中的任務(wù)通常對應(yīng)一個進(jìn)程,當(dāng)一個程序進(jìn)入內(nèi)存運行時,即變成一個進(jìn)程.進(jìn)程是處于運行過程中...
    勝浩_ae28閱讀 5,256評論 0 23
  • 進(jìn)程和線程 進(jìn)程 所有運行中的任務(wù)通常對應(yīng)一個進(jìn)程,當(dāng)一個程序進(jìn)入內(nèi)存運行時,即變成一個進(jìn)程.進(jìn)程是處于運行過程中...
    小徐andorid閱讀 2,966評論 3 53
  • ??一個任務(wù)通常就是一個程序,每個運行中的程序就是一個進(jìn)程。當(dāng)一個程序運行時,內(nèi)部可能包含了多個順序執(zhí)行流,每個順...
    OmaiMoon閱讀 1,800評論 0 12
  • 單任務(wù) 單任務(wù)的特點是排隊執(zhí)行,也就是同步,就像再cmd輸入一條命令后,必須等待這條命令執(zhí)行完才可以執(zhí)行下一條命令...
    Steven1997閱讀 1,349評論 0 6
  • 女漢子應(yīng)是個中性詞,沒有人會從內(nèi)心里認(rèn)為這是個褒義詞,盡管會帶著點佩服。 百度百科中這樣定義女漢子: 女漢子,是指...
    子姆閱讀 515評論 7 10

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