美文网首页
python 线程

python 线程

作者: 足__迹 | 来源:发表于2019-08-23 21:43 被阅读0次

描述并发和并行的概念

  • 并发:当前任务数大于cpu核数,通过任务调度算法,实现多个任务一起执行(实际是快速切换执行)
  • 并行:当前任务数小于cpu核数在,每个任务单独执行

同步和异步

  • 异步: 多任务, 多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线。(同一时间只能做一件事,做完了才能做下一件事情)

  • 同步: 多任务, 多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才能继续执行, 只有一个主线(可以近似的理解成同一时间有多个事情在做,但有先后)

  • 阻塞:从调用者的角度出发,如果在调用的时候,被卡住,不能再继续向下运行,需要等待,就说是阻塞

  • 非阻塞: 从调用者的角度出发, 如果在调用的时候,没有被卡住,能够继续向下运行,无需等待,就说是非阻塞

学习同步和异步
https://cloud.tencent.com/developer/news/257034

通过线程展示异步处理
from threading import Thread
import time


def func2(func):
    """
    装饰器:计算运行时间
    """
    print('运行装饰器')

    def wrapper():
        stime = time.time()  # 获取开始运行时间
        func()
        etime = time.time()  # 获取结束时间
        print('程序运行时间{}秒'.format(etime - stime))

    return wrapper





def work1():
    for i in range(6):
        time.sleep(1)
        print('绣毯子{}次'.format(i))

def work2():
    for i in range(6):
        time.sleep(1)
        print('浇花{}次'.format(i))

@func2
def main():

    T1 = Thread(target=work1) #指定任务不能待"()"
    T1.start()
    T2 = Thread(target=work2)
    T2.start()
    

if __name__ == '__main__':
    main()


关于thrading模块

https://www.runoob.com/python/python-multithreading.html

上面的主线程没有等待导致运行时间计算错误修改如下

from threading import Thread
import time


def func2(func):
    """
    装饰器:计算运行时间
    """
    print('运行装饰器')

    def wrapper():
        stime = time.time()  # 获取开始运行时间
        func()
        etime = time.time()  # 获取结束时间
        print('程序运行时间{}秒'.format(etime - stime))

    return wrapper


def work1():
    for i in range(6):
        time.sleep(1)
        print('绣毯子{}次'.format(i))


def work2():
    for i in range(6):
        time.sleep(1)
        print('浇花{}次'.format(i))


@func2
def main():
    _T1 = Thread(target=work1)  # 指定任务不能待"()"
    _T1.start()
    _T2 = Thread(target=work2)
    _T2.start()
    # 设备主线程等待子线程执行结束后再往下执行
    _T1.join()
    _T2.join()
    print('----主线程执行mian函数执行完毕---')


if __name__ == '__main__':
    main()
    print('---主线程执行结束后的代码-----')

线程
1.主线程默认不会等待子线程(不会管主线程是否执行完毕)
2,多线程可以共用同一块全局变量(使用的是同一块内存),会出现资源竞争
3,python中的线程没法进行并行
线程之间啥时间进行切换:
1,io耗时操作; 网络,文件,输入,输出等操作时会进行切换
2,线程执行时间达到一定的阈值,会进行切换操作

线程锁 lock

相关文章

  • 11-9 多线程和多进程

    Python的GIL是针对进程还是线程?  是线程 Python多核cpu可以运行多线程吗? Python线程执行...

  • 5-线程(补充)

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • 多线程

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • Python 多线程 threading和multiproces

    Python 多线程 threading和multiprocessing模块 Python中常使用的线程模块 th...

  • Mr.Li--python-系统编程-线程

    线程 多线程--threading python的thread模块是比较底层的模块,python的threadin...

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

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

  • python系统编程2

    线程 1.1.1 多线程——threading python的thread模块是比较底层的模块,python的th...

  • python的线程模块和基本用法笔记

    python的线程模块和基本用法笔记 python线程中的模块:thread,threading,queue等程序...

  • GIL

    谈谈python的GIL、多线程、多进程 最近在看 Python 的多线程,经常我们会听到老手说:“python下...

  • Python-线程、线程池

    1. Python多线程 python3中常用的线程模块为:_thread(Python2中的thread)、th...

网友评论

      本文标题:python 线程

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