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()  #判断线程是否激活
  • 相关阅读:
    python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
    python 全栈开发,Day73(django多表添加,基于对象的跨表查询)
    python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)
    bootstrap源码里的function加上了+号
    php get set方法深入理解
    20160519
    NetStatusEvent info对象的状态或错误情况的属性
    php 代码大全
    常见HTTP状态(304,200等)
    php strtotime 和 date 日期操作
  • 原文地址:https://www.cnblogs.com/ronyjay/p/12794327.html
Copyright © 2011-2022 走看看