设为首页 收藏本站
查看: 1502|回复: 0

[经验分享] Python之threading模块简单使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-24 08:47:31 | 显示全部楼层 |阅读模式
下面的代码来自《Python核心编程》(第二版)一书。

threading模块对象
说明
Thread表示一个线程的执行的对象
Lock锁原语对象(跟thread模块里的锁原语对象相同)
RLock可重入锁对象。使单线程可以再次获得已经获得了的锁(递归锁定)
Condition条件变量对象能让一个线程停下来,等待其他线程满足了某个“条件”。如,状态的改变或值得改变
Event通用的条件变量,多个线程可以等待某个事件的发生,在事件发生后,所有的线程都会被激活
Semaphore为等待锁的线程提供一个类似“等候室”的结构
BoundedSemaphore与Semaphore类似,只是它不允许超过初始值
Timer与Thread相似,只是它要等待一段时间后才开始运行

用Thread类,我们可以用多种方法来创建线程。一般有三种常见的方法,分别为:
    + 创建一个Thread的实例,传给它一个函数

    + 创建一个Thread的实例,传给它一个可调用的类对象

    + 从Thread派生出一个子类,创建一个这个子类的实例


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# cat mtsleep3.py
#!/usr/bin/env python

import threading
from time import sleep, ctime

loops = [4, 2]

def loop(nloop, nsec):
    print 'start loop', nloop, 'at:', ctime()
    sleep(nsec)
    print 'loop', nloop, 'done at:', ctime()

def main():
    print 'starting at:', ctime()
    threads = []
    nloops = range(len(loops))

    for i in nloops:
        t = threading.Thread(target=loop,
                   args=(i, loops))
        threads.append(t)

    for i in nloops:
        threads.start()

    for i in nloops:
        threads.join()

    print 'all DONE at:', ctime()

if __name__ == '__main__':
    main()



所有的线程都创建了之后,再一起调用start()函数启动,而不是创建一个启动一个。而且,不用再管理一堆锁(分配锁、获得锁、释放锁、检查锁的状态等),只要简单地对每个线程调用join()函数就可以了。join()函数会等到线程结束,或者在给了timeout参数的时候,等到超时为止。

运行结果为:
1
2
3
4
5
6
7
# python mtsleep3.py
starting at: Wed Sep 23 09:12:48 2015
start loop 0 at: Wed Sep 23 09:12:48 2015
start loop 1 at: Wed Sep 23 09:12:48 2015
loop 1 done at: Wed Sep 23 09:12:50 2015
loop 0 done at: Wed Sep 23 09:12:52 2015
all DONE at: Wed Sep 23 09:12:52 2015






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-117962-1-1.html 上篇帖子: python 实现 自动 svn checkout 下篇帖子: pip:python包管理安装工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表