美文网首页
Python基础 - 多线程

Python基础 - 多线程

作者: 莫名ypc | 来源:发表于2018-10-25 17:09 被阅读0次

多线程

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

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

多个线程的任务同时执行

import time
import datetime
import random
import threading


def download(file):
    print(threading.current_thread())
    print(datetime.datetime.now(), '开始下载:%s' % file)
    # sleep(时间):会将当前线程阻塞指定的时间(停指定的时间然后再往下执行)
    time1 = random.randint(1, 8)
    time.sleep(time1)
    print(datetime.datetime.now(), '下载%s结束' % file, '用时:%d' % time1)


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

if __name__ == '__main__':

    # 获取当前线程
    print(threading.current_thread())

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

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

创建线程2

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

创建线程方式1:

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

创建线程方式2:

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

1.创建线程类

class DownLoadThread(Thread):
    """下载线程类"""
    def __init__(self, file):
        super().__init__()
        self.file = file

    def run(self):
        # 注意:如果需要给run方法在传数据,通过当前类的属性来传
        print('%s 开始下载:' % self.file, datetime.now())
        time.sleep(3)
        print('%s下载结束' % self.file)

2.创建线程对象

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

# 3.通过start去执行run中的任务
"""
注意:如果直接调用run方法,run方法中的任务不会在当前的子线程中执行
"""
# t1.run()
t1.start()
t2.start()

多线程网络编程

服务器

import socket
from threading import Thread


class ConversionThread(Thread):
    def __init__(self, conversion:socket, addr):
        super().__init__()
        self.conversion = conversion
        self.addr = addr

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

            # 发送消息
            message = '你好'
            self.conversion.send(message.encode('utf-8'))


def create_server():
    server = socket.socket()
    server.bind(('10.7.156.129', 8080))
    server.listen(512)

    # 让服务器一直运行
    while True:
        conversion, addr = server.accept()

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


create_server()

客户端

import socket

client = socket.socket()
client.connect(('10.7.156.129', 8080))

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

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

相关文章

  • Python多线程编程——多线程编程中的加锁机制

    如果大家对Python中的多线程编程不是很了解,推荐大家阅读之前的两篇文章:Python多线程编程——多线程基础介...

  • Python 3中的多线程

    Python 3的多线程 Python 3的多线程模块threading在旧版_thread模块基础上进行了更高层...

  • Python多线程编程——创建线程的两个方法

    之前的一篇文章:Python多线程编程——多线程基础介绍,主要介绍了线程的基本知识,以及使用Python创建线程的...

  • python多线程

    python基础之多线程锁机制 GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析...

  • 大师兄的Python学习笔记(十一): 时间模块time,dat

    大师兄的Python学习笔记(十): 多进程和多线程大师兄的Python学习笔记(十二): 常用高级函数 一、基础...

  • Python基础 - 多线程

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

  • python基础 多线程

    低级模块:_thread高级模块:threading(一般使用这个)启动一个线程就是把一个函数传入并创建Threa...

  • python多线程基础

    多线程准备脚本test01 多线程准备脚本test02 多线程准备脚本test03 多线程准备脚本test04 1...

  • 18年学习技术列表

    后端 语言 java 继续夯实基础,注重于多线程,函数式编程,并发集合相关类。 Python scrapy爬虫框架...

  • 2018-08-04(15.5)多线程

    python基础语法(15.5) 多线程 初步了解多线程 (个人理解)电脑的cpu一般情况下一次只能给一个进程提供...

网友评论

      本文标题:Python基础 - 多线程

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