韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > Python基础教程 > Python创建线程

Python创建线程

头像

silencement

2019-07-05 10:16:443029浏览 · 0收藏 · 0评论

Python 提供了 _thread 和 threading 两个模块来支持多线程,其中 _thread 提供低级别的、原始的线程支持,以及一个简单的锁,正如它的名字所暗示的,一般编程不建议使用 thread 模块;而 threading 模块则提供了功能丰富的多线程支持。

Python 主要通过两种方式来创建线程:

使用 threading 模块的 Thread 类的构造器创建线程。

继承 threading 模块的 Thread 类创建线程类。

调用 Thread 类的构造器创建线程

调用 Thread 类的构造器创建线程很简单,直接调用 threading.Thread 类的如下构造器创建线程:

__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *,daemon=None)

上面的构造器涉及如下几个参数:

group:指定该线程所属的线程组。目前该参数还未实现,因此它只能设为 None。

target:指定该线程要调度的目标方法。

args:指定一个元组,以位置参数的形式为 target 指定的函数传入参数。元组的第一个元素传给 target 函数的第一个参数,元组的第二个元素传给 target 函数的第二个参数……依此类推。

kwargs:指定一个字典,以关键字参数的形式为 target 指定的函数传入参数。

daemon:指定所构建的线程是否为后代线程。

通过 Thread 类的构造器创建井启动多线程的步骤如下:

调用 Thread 类的构造器创建线程对象。在创建线程对象时,target 参数指定的函数将作为线程执行体。

调用线程对象的 start() 方法启动该线程。

下面程序示范了通过 Thread 类的构造器来创建线程对象:

import threading

# 定义一个普通的action函数,该函数准备作为线程执行体
def action(max):
    for i in range(max):
        # 调用threading模块current_thread()函数获取当前线程
        # 线程对象的getName()方法获取当前线程的名字
        print(threading.current_thread().getName() +  " " + str(i))
# 下面是主程序(也就是主线程的执行体)
for i in range(100):
    # 调用threading模块current_thread()函数获取当前线程
    print(threading.current_thread().getName() +  " " + str(i))
    if i == 20:
        # 创建并启动第一个线程
        t1 =threading.Thread(target=action,args=(100,))
        t1.start()
        # 创建并启动第二个线程
        t2 =threading.Thread(target=action,args=(100,))
        t2.start()
print('主线程执行完成!')

上面程序中的主程序包含一个循环,当循环变量 i 等于 20 时创建并启动两个新线程:

创建了一个 Thread 对象,该线程的 target 为 action,这意味着它会将 action 函数作为线程执行体。接下来程序调用 start() 方法来启动t1线程。

再次创建了一个线程,其创建和启动方式与第一个线程完全相同。

运行上面程序,将会看到如图所示的界面。

2-1Z3041H32C17.jpg

虽然上面程序只显式创建并启动了两个线程,但实际上程序有三个线程,即程序显式创建的两个子线程和主线程。前面己经提到,当 Python 程序开始运行后,程序至少会创建一个主线程,主线程的线程执行体就是程序中的主程序(没有放在任何函数中的代码)。

从上图可以看出,此时程序中共包含三个线程,这三个线程的执行没有先后顺序,它们以并发方式执行:Thread-1 执行一段时间,然后可能 Thread-2 或 MainThread 获得 CPU 执行一段时间,接下来又换其他线程执行,这就是典型的线程并发执行,CPU 以快速轮换的方式在多个线程之间切换,从而给用户一种错觉,即多个线程似乎同时在执行。

通过上面介绍不难看出多线程的意义,如果不使用多线程,主程序直接调用两次 action() 函数,那么程序必须等第一次调用的 action() 函数执行完成,才会执行第二次调用的 action() 函数;必须等第二次调用的 action() 函数执行完成,才会继续向下执行主程序。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

《大尺度吃奶做爰》电影| 教练车内含乳挺进她漫画| 男朋友摸完小花园小肚子有点痛| 快拨出我是你老师最火的一句| 含着奶做着爱太舒服了| 桃色| 老和尚猛挺进她莹莹的体导演是谁| 公交车被上高湖了还能坐吗小说| 胸罩100%透明| 初次尝了销魂少妇邻居| 坤坤寒进桃子里在线看歌词| 生殖瑜伽| 甜蜜惩罚免费观看第一季全集| 白日梦我电视剧| 好好疼爱里面第6集免费观看| 绝美儿媳妇苏酥| 京香JULIA| 6969影院免费观看电视剧大全| 爸爸汆肉的日常| 《欢迎来到!浪荡精灵之森》动漫..| 人野兽马狗猪大全| 一品国精和二品国精的文化意义 | 国产在线观看免费全集电视剧网站| 开会桌下把荫蒂添的好多水| 榨精病栋| 白日梦我电视剧免费观看完整版| 同学的母亲中字ID| 100种双人插画姿势素材 | 三个医生换着躁我一个观后感| BUBBLE| 做我的爱人6集免费观看电视剧 | 亚洲一区二区| 吨叔| 一家乱战1-13集大| 爸爸的大DJ小说| 《魅魔之耻》1~4集免费看| 蜜桃成熟时33D| C罗正式加盟拜仁| 老公你好棒啊我好爱你| 边摸边吃奶边做的视频| 《黏糊糊的你》免费观看