python 线程

2019-08-23  本文已影响0人  足__迹

描述并发和并行的概念

同步和异步

学习同步和异步
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

上一篇 下一篇

猜你喜欢

热点阅读