zoukankan      html  css  js  c++  java
  • 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()  #判断线程是否激活
  • 相关阅读:
    windows cmd 中获取当前时间并输出此时间
    使用windows批处理来让git每日自动更新代码
    拒绝垃圾文章 在 ejabberd 中使用 MySQL
    IOS调试lldb命令常用,po,
    IOS 多语言本地化 完美解决方案
    [转]Xcode封装.Bundle文件
    百度地图SDK引用问题 Symbol(s) not found for architecture armv64
    loaded the "ViewController" nib but the view outlet was not set. 处理方式
    initWithFrame 和 initWithCoder
    使用IB_DESIGNABLE与IBInspectable特性实现可在视图编辑器的功能栏中设置
  • 原文地址:https://www.cnblogs.com/ronyjay/p/12794327.html
Copyright © 2011-2022 走看看