美文网首页
Day20-多线程

Day20-多线程

作者: 留级是不可能留级的 | 来源:发表于2018-10-25 17:21 被阅读0次

    一、多线程

    每个程序在运行的时候系统都会为这个进程创建一个线程,这个线程我们叫主线程
    程序员自己创建除线程我们叫子线程
    程序员自己创建的线程叫子线程

    多个任务在一个线程中按顺序一个一个执行的(线程的串行)
    多个线程的任务同时执行

    import time
    import datetime
    from random import randint
    import threading
    
    
    def download(file):
        print(datetime.datetime.now(), '开始下载,%s' % file)
        # sleep(时间):将当前线程阻塞指定的时间
        # 时间单位:秒
        time.sleep(randint(5, 10))
        print(datetime.datetime.now(), '下载%s结束' % file)
    
    
    """
    python通过threading标准库来支持多线程
    """
    
    if __name__ == '__main__':
        """
        Thread(target= , args=)
        target : 传一个需要在子线程中执行函数(类型是function的变量)
        args: 在子线程中调用target对应函数的时候,该传什么参数
        """
        # current_thread()获取当前线程
        t1 = threading.Thread(target=download, args=('阿甘正传',))
        t1.start()
        t2 = threading.Thread(target=download, args=('救赎',))
        t2.start()
    

    二、创建进程的方式

    创建线程方式1:

    直接通过Thread类创建对象,将需要在子线程中执行的函数作为target参数穿进去

    创建线程方式2:

    a.自己写一个类去继承Thrad类
    b.重写实现类的run方法,run中的任务就是在子线程中执行的任务
    c.创建当前类的对象,就是线程对象.然后调用start去执行线程中任务
    from threading import Thread
    import datetime
    from time import sleep
    
    # 创建线程类
    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下载结束, ' % self.file, datetime.datetime.now())
    
    
    # 创建线程对象
    t1 = DownLoadThread('火影忍者')
    t2 = DownLoadThread('进击的巨人')
    # 通过start去执行run中任务
    t1.start()
    t2.start()
    

    三、多线程的服务器与客户端

    服务器代码

    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()
            # 创建处理这个请求对应的子线程
            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())
    

    相关文章

      网友评论

          本文标题:Day20-多线程

          本文链接:https://www.haomeiwen.com/subject/ooectqtx.html