• Python多线程(一):多线程的创建


    在python3中,多线程主要使用threading模块

    首先,来看一个单任务模式的例子

    import datetime,time
    
    
    def eat_hotpot(food):
        for i in range(2):
            print(datetime.datetime.now().strftime('%X') + ' ' + "eat " + str(food))
            time.sleep(2) #每一次调用耗时2s
    
    
    def watch_TV(movie):
        for i in range(2):
            print(datetime.datetime.now().strftime('%X') + ' ' + "watch " + str(movie))
            time.sleep(2) #每一次调用耗时2s
    
    
    if __name__ == '__main__':
        eat_hotpot("毛肚")
        watch_TV("末代皇帝")
        print(datetime.datetime.now().strftime('%X') + ' ' + "吃火锅,看电视都结束啦~~")
    14:45:35 eat 毛肚
    14:45:37 eat 毛肚
    14:45:39 watch 末代皇帝
    14:45:41 watch 末代皇帝
    14:45:43 吃火锅,看电视都结束啦~~
    #时间都相隔2s,运行完程序,耗时8s

    运行的结果如上,可以看出,每调用一次耗时2s,整个程序是线性执行的。

    接下来我们将程序改造一下:

    import threading
    import datetime,time
    
    
    def eat_hotpot(food):
        for i in range(2):
            print(datetime.datetime.now().strftime('%X') + ' ' + "eat " + str(food))
            time.sleep(2)
    
    
    def watch_TV(movie):
        for i in range(2):
            print(datetime.datetime.now().strftime('%X') + ' ' + "watch " + str(movie))
            time.sleep(2)
    
    
    if __name__ == '__main__':
       #创建两个子线程 t1
    = threading.Thread(target=eat_hotpot,args=('毛肚',)) t2 = threading.Thread(target=watch_TV,args=('末代皇帝',))
       #启动两个线程 t1.start() t2.start()
    #主线程
    print(datetime.datetime.now().strftime('%X') + ' ' + "吃火锅,看电视都结束啦~~")
    14:49:43 eat 毛肚
    14:49:43 watch 末代皇帝
    14:49:43 吃火锅,看电视都结束啦~~  #可以看到eat_hotpot,watch_TV,和主线程都在14:49:43这一时刻同时启动
    14:49:45 watch 末代皇帝   #主线程结束后,子线程继续执行
    14:49:45 eat 毛肚  #运行完程序,耗时2s       

    使用threading模块创建多线程,最主要是使用Thread这个类,创建Thread对象后,让他运行,给个Thread代表一个线程,在每个线程中让程序处理不同的任务,这就是多线程编程

    threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

    target:线程调用的对象,就是函数名,注意不用写括号

    name:线程的名字,默认值为“Thread-N“,N是一个数字。

    args:为目标函数传递的参数,元组,如果只有一个参数,需要有逗号

    kwargs:为目标函数传递的关键字参数,字典

    另外该模块还有如下的一些方法和属性

    current_thread()   #当前线程
    Thread.getName() #获取线程name
    Thread.setName() #设置线程name
    Thread.ident #获取线程标识符
    Thread.is_alive()
    Thread.isAlive()  #判断线程是否激活
  • 相关阅读:
    leetcode 43. 字符串相乘
    leetcode 20. 有效的括号 (python)
    leetcode 125. 验证回文串(python)
    leetcode 171. Excel表列序号(python)
    leetcode 190. 颠倒二进制位(c++)
    leetcode 122. 买卖股票的最佳时机 II (python)
    leetcode 118. 杨辉三角(python)
    leetcode 141. 环形链表(C++)
    leetcode 189. 旋转数组(python)
    leetcode 217. 存在重复元素 (python)
  • 原文地址:https://www.cnblogs.com/ronyjay/p/12794327.html
Copyright © 2020-2023  润新知