美文网首页
day20-多线程

day20-多线程

作者: 丿Rem丶 | 来源:发表于2018-10-27 15:10 被阅读0次

一、线程

  • 定义:每个程序在运行的时候(进程)系统都会为这个进程创建一个线程,这个线程我们叫主线程。程序员自己创建的线程叫子线程
    多个任务在一个线程中是按顺序一个一个执行的(线程的串行)
    多个线程的任务同时执行

  • 实现方法:python通过threading标准库来支持多线程

  • 创建线程方式:

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

    • b.写一个自己的类去继承Thread类
      重写当前类的run方法,run中的任务就是在子线程中执行的任务创建当前类的对象, 就是线程对象。然后调用start去执行线程中任务

二、例子

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(时间): 会将当前线程阻塞指定的时间(停指定的时间然后再往后执行)
    # 时间单位:秒
    time1 = randint(5, 10)
    time.sleep(time1)

    print(datetime.datetime.now(),'下载%s结束'%file,'总共耗时:%d' % time1)


"""
python通过threading标准库来支持多线程
"""

if __name__ == '__main__':

    # download('肖生克的救赎')
    # current_thread()获取当前线程
    print(threading.current_thread())

    # 1.创建一个线程对象
    """
    Thread(target=, args=)
    target: 需要传一个需要在子线程中执行的函数(类型是function的变量)
    agrs: 在子线程中调用target对应的函数的时候,该传什么参数。类型是元祖
    """
    t1 = threading.Thread(target=download, args=('阿甘正传',))
    t2 = threading.Thread(target=download, args=('肖生克的救赎',))

    # 2.让子线程去执行任务
    t1.start()
    t2.start()

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

三、线程和网络通信的应用

1.服务器

"""__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)

            # 发送消息
            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)

    # 让服务器一直运行
    while True:
        # 会阻塞线程
        conversation, addr = server.accept()

        # 创建处理这个请求对应的子线程
        t = ConversationThread(conversation, addr)
        t.start()



if __name__ == '__main__':
    creat_server()

2.客户端

"""__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)

相关文章

  • day20-多线程

    一、多线程 每个程序在运行的时候(进程)系统都会为这个进程创建一个线程,这个线程我们叫主线程。 程序员自己创建的线...

  • day20-多线程

    1.多线程 代码示例 运行结果 2.创建线程 代码示例 运行结果 4.应用 server(服务端) 代码示例 cl...

  • Day20-多线程

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

  • day20-多线程

    一、线程 定义:每个程序在运行的时候(进程)系统都会为这个进程创建一个线程,这个线程我们叫主线程。程序员自己创建的...

  • #30天专注橙长计划#数学魔术Day20-命运交汇点PPT

    #30天专注橙长计划#数学魔术Day20-命运交汇点PPT

  • 一阶段day20-多线程1

    1、一个程序被打开,就会变成一个进程;2、每个程序在运行的时候,系统都会默认为这个进程创建一个线程,这个线程我们叫...

  • 考霸训练营学习笔记(DAY20)

    打卡日期:2019.5.20 课程标题:Day20-用题目增进理解:从越少越好到多多益善 课程链接:https:/...

  • “题海战术”,刷刷刷给你一个学霸

    Day20-用题目增进理解:从越少越好到多多益善课程链接:https://www.yojiang.cn/l/s/4...

  • Day20-复习

    2.基本数据类型(都是类)整型(int)、浮点型(float)、布尔(bool)、复数(complex)、字符串(...

  • day20-作业

    写一个正则表达式判断一个字符串是否是ip地址规则:一个ip地址由4个数字组成,每个数字之间用.连接。每个数字的大小...

网友评论

      本文标题:day20-多线程

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