一:多线程的创建

threading库创建线程有两种方式,函数式和继承式
    1)函数式

  • def func():

  • print 'Starting'

  • print 'Ending'

  • t=threading.Thread(name='func',target=func)

  • t.start()

2)继承式

  • class ThreadClass(threading.Thread):

  • def __init__(self, group = None, target = None, name = None, args = (), kwargs = {}):

  • threading.Thread.__init__(self, group, target, name, args, kwargs)

  • def run(self):

  • print 'Starting'

  • print 'Ending'

  • t = ThreadClass()

  • t.start()

Thread类的构造函数定义如下:

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

group:留作ThreadGroup扩展使用,一般赋值NULL

target:就是新建线程要执行的任务函数名

name:线程的名字,也可使用getName(),setName()获取或者修改

args:tuple参数

kwargs:dictionary参数

二:相关函数

1)start():启动线程;

2)join():主线程阻塞住,等待调用该函数的线程结束。join的参数是一个数字,如果非零就表示在此时间后,如果调用join的线程没有结束join函数也返回;

3)is_alive(), isAlive(),判断线程是否结束;

4)setDaemon(),设置函数为守护线程

  • class ThreadClass(threading.Thread):

  • def __init__(self, group = None, target = None, name = None, args = (), kwargs = {}):

  • threading.Thread.__init__(self, group, target, name, args, kwargs)

  • def run(self):

  • while True:

  • dosometing()......

  • t = ThreadClass()

  • t.setDaemon(True)

  • t.start()

  • while True:

  • if not t.is_alive():

  • print "t is dead"

  • exit(1)

  • time.sleep(60)

  • t.join()

三:守护线程

守护线程的概念有点不同于Linux环境下的概念,可能是我没理解,但是这个概念和Java里的守护线程一样:

守护线程在主线程退出后也会随着退出,非守护线程则不会。什么意思呢?

对于普通线程,如果线程的任务没有结束,主线程不会退出,整个程序也不会退出;

对于守护线程,即使线程任务还没有结束,如果主线程退出该线程也会退出;

(不知道这样的理解对不对,实验一下)

  • #--encoding='utf-8'--

  • import logging

  • import threading

  • import time

  • logging.basicConfig(

  • level=logging.DEBUG,

  • format='(%(threadName)-10s) %(message)s',

  • )

  • def ThreadFunc():

  • logging.debug(' Starting')

  • file_object = open('thefile.txt', 'w+')

  • while True:

  • file_object.write('wahaha\r\n')

  • file_object.flush()

  • time.sleep(1)

  • logging.debug(' Existing')

  • file_object.close( )

  • t=threading.Thread(name='ThreadFunc',target=ThreadFunc)

  • #t.setDaemon(True)

  • t.start()

  • time.sleep(5)

1)首先注释掉d.setDaemon(True),也就是d是一个普通线程

执行之后,主线程本该在5秒后退出,但是却发现该线程还是不断的输入wahaha,该脚本一直运行直到kill掉改脚本的执行。此时Ctrl+c也无效,只有kill。

2)删除d.setDaemon(True)前面的#,也就是d是一个守护线程

执行之后,主线程在5秒后退出,线程d只输出少于五个wahah之后也随着主线程的退出而退出,整个脚本退出。在退出前Ctrl+c有效。

Python多线程的创建,相关函数和守护线程的理解的更多相关文章

  1. java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)

    今天开始就来总结一下Java多线程的基础知识点,下面是本篇的主要内容(大部分知识点参考java核心技术卷1): 1.什么是线程以及多线程与进程的区别 2.多线程的创建与启动 3.中断线程和守护线程以及 ...

  2. Java 多线程(四)之守护线程(Daemon)

    目录 定义 如何创建 判断 注意事项 函数setDaemon(true)必须在 start() 函数之前使用. 守护线程中产生的线程也是守护线程: 测试 @ 定义 Java 中有两种线程: 一种是用户 ...

  3. java守护线程的理解

    package daemonThread; /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false * 只要当前JVM实例中存在任何一个非守护线程没有结束,守 ...

  4. JAVA 对守护线程的理解

    1.在start之前,setDaemon. 该现场就成为守护线程了. 2.守护现线程并不是主线程结束,子线程(守护线程)也跟着结束.而是守护线程在没有用户线程运行的情况伴随着JVM退出而结束. 示例代 ...

  5. python多线程——如何停止一个死循环的线程

    进程想要执行任务就需要依赖线程.换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程. 那什么是多线程?提到多线程这里要说两个概念,就是串行和并行,搞清楚这个,我们才能更好地理解多 ...

  6. python守护线程

    如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出.如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性.即在线程开 ...

  7. 说说Python多线程中的daemon属性方法

    大家看多线程部分的时候肯定看到过daemon这个属性,当我在百度了一圈后也没发现有比较好的解释(或者大家对这个解释都非常清楚),于是自己通过代码和官方介绍了解它,进行了一些总结 给大家一些参考. 首先 ...

  8. web端自动化——python多线程

    Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁.threading基于Java的线程模型设计. 锁(Lock)条件变 ...

  9. Python 多线程(一)

    Python多线程(一) 目录 Python多线程(一) 线程 Python线程模型 Python虚拟机按照下面所述方式来切换线程 Threading模块 未引进线程 结果 引入线程 方式一:创建Th ...

随机推荐

  1. Hibernate各保存方法之间的差 (save,persist,update,saveOrUpdte,merge,flush,lock)等一下

    hibernate保存  hibernate要保存的目的是提供一个方法,多.它们之间有许多不同之处,点击此处详细说明.使得差: 一.预赛: 在所有.阐释.供hibernate,,transient.p ...

  2. hdu 1712 (分组背包入门)

    http://acm.hdu.edu.cn/showproblem.php?pid=1712 问题 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].这些物品被划分为若干组, ...

  3. 【高德地图API】如何获得行政区域?如何制作行政规划图?

    原文:[高德地图API]如何获得行政区域?如何制作行政规划图? 什么是行政规划图?如何获得每个行政区域的边界轮廓图?举例:重庆市 江北区.如图: 官方类参考:http://developer.amap ...

  4. centos7的安装

    初装centos7还是在九月份,那时候关于win7 下centos7硬盘安装的资料很少,现在就好多, 在这里备份下东西吧 首先是安装的时候,关于找从那个地方找image的问题. hda ,sda分别表 ...

  5. iOS_中国汉字到拼音_pinyin4objc

    最后效果图: ViewController.h // // ViewController.h // PinYin4Objc汉字转拼音演示demo // // Created by beyond on ...

  6. 皴EBS R12应用程序和数据库用户password

    1.假设你有一个EBS周围环境APPS用户password,能够打破用户的应用程序password 参考:Oracle EBS R12下怎样破解用户password 2,假设没有APPS用户passw ...

  7. Object-C 基础学习笔记(for,foreach,while,switch)

    int main(int argc, const char * argv[]) { //for,foreach,while,do-while,switch NSMutableArray* mutabl ...

  8. ASP.NET 5:初始化数据库

    ASP.NET 5:初始化数据库 1.初始化数据库 1.2目录 这不是专述模式/架构设计的帖子,架构搭建以讲解文章为目的,先不过多分层. 截这个图也是便于你对应下面找代码文件路径! 1.2代码 先控制 ...

  9. 第1章1节《MonkeyRunner源码剖析》概述:前言(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  10. 还在等待漫长的iOS构建过程?来试试通过命令行的方式进行iOS应用快速构建和运行吧

    不必多言,Xcode慢得很是众所周知的了.更甚者是,我有时发觉自己太依赖于Cocoa Touch的自动完成功能了,这可是个天使和魔鬼的结合体! 故此我开始去寻觅一个替代的流程来通过命令行来实现我需要的 ...