创建线程的两种方法:

1,直接调用threading.Thread来构造thread对象,Thread的参数如下:

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

group为None;

target为线程将要执行的功能函数;

name为线程的名字,也可以在对象构造后调用setName()来设定;

args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1,);

kwargs为dict类型的参数,也即位命名参数

threading.Thread对象的其他方法:

start(),用来启动线程;

join(), 等待直到线程结束;

isAlive(),获取线程状态

setDeamon(), 设置线程为deamon线程,必须在start()调用前调用,默认为非demon。

注意: python的主线程在没有非deamon线程存在时就会退出。

threading.currentthread() , 用来获得当前的线程;

threading.enumerate() , 用来多的当前存活的所有线程;

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
#coding:utf-8
import threading
def func1(num):
    for in range(num):
        #threading.currentThread()获取当前线程,getName()获取线程名字
        print 'I am %s.num:%s' % (threading.currentThread().getName(), i)
                       
def main(thread_num):
    thread_list = [] #定义一个线程列表
    for in range(thread_num):
        thread_list.append(threading.Thread(target=func1, args = (3, )))
    for in thread_list:
        #a.setDaemon(True)这个setDaemon默认为False 非守护线程
        #表示主线程等所有子线程结束后,在结束
        #设置为True的话 表示是个守护线程 子线程就会随着主线程的结束而结束
        #听说服务监控工具生成的心跳线程 就是用的守护线程
        a.start()
                       
                       
    for in thread_list:
        a.join() #表示等待直到线程运行完毕
                       
main(3)
#########运行结果######
>>> I am Thread-1.num:0
I am Thread-1.num:1
I am Thread-1.num:2
I am Thread-2.num:0
I am Thread-2.num:1
I am Thread-2.num:2
I am Thread-3.num:0
I am Thread-3.num:1
I am Thread-3.num:2

2,直接从threading.Thread继承,然后重写__init__方法和run方法

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
#coding:utf-8
import threading
class MyThread(threading.Thread): #继承父类threading.Thread
    def __init__(self, num ): 
        threading.Thread.__init__(self)
        self.num = num
          
    #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 
    def run(self):
        for in range(self.num):
            print 'I am %s.num:%s' % (self.getName(), i)
                 
for in range(3):
    = MyThread(3)
    t.start()
    t.join()
##########运行结果#########
>>> I am Thread-1.num:0
I am Thread-1.num:1
I am Thread-1.num:2
I am Thread-2.num:0
I am Thread-2.num:1
I am Thread-2.num:2
I am Thread-3.num:0
I am Thread-3.num:1
I am Thread-3.num:2

本文出自 “师父领进门,修行靠个人!” 博客,请务必保留此出处http://zeping.blog.51cto.com/6140112/1258966

python:threading多线程模块-创建线程的更多相关文章

  1. python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型

    线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...

  2. Python使用Threading模块创建线程

    使用Threading模块创建线程,直接从threading.Thread继承,然后重写__init__方法和run方法: #!/usr/bin/python # -*- coding: UTF-8 ...

  3. 使用threading模块创建线程

    #_author:来童星#date:2019/12/17#使用threading模块创建线程import threading,timedef process(): for i in range(3): ...

  4. iOS开发多线程篇—创建线程

    iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] in ...

  5. 基于Python的多线程模块Threading小结

    步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...

  6. threading模块创建线程

    什么是线程 (thread) 线程也是一种多任务编程方式,可以使用计算机的多核资源.线程被称为轻量级的进程. 线程特征 *线程计算机多核分配的最小单位 *一个进程可以包含多个线程 *线程也是一个运行的 ...

  7. python-网络安全编程第六天(threading多线程模块&Queue模块&subprocess模块)

    前言 昨天晚上9点多就睡了 2点起来没睡意... 那就学习吧emmmm ,拿起闲置几天的python课程学习.学习到现在5.58了 总结下 继续开始学习新的内容 多多线程? 线程(英语:thread) ...

  8. Python threading(多线程)

    threading模块在较低级别thread模块之上构建更高级别的线程接口. 一.threading模块定义了以下函数和对象: threading.active_count() 等同于threadin ...

  9. java多线程之创建线程的4种方式及Future

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用四种方式来创建线程: 继承Thread创建线程 实现Runnable接口创建线程 实现callab ...

随机推荐

  1. ios LoadView 方法

    当ViewController中的View不通过nib文件而是自己来创建的时候需要重载LoadView方法.否则不需要重载LoadView方法.

  2. 【231】◀▶ 利用 IDL 读取 TIFF 数据

    参考:Create Latitude/Longitude Arrays for GeoTIFF Image 用到的函数为 READ_TIFF,通过此函数可以获取 TIFF 数据的数组信息,同时可以获取 ...

  3. ORM即 对象-关系映射(转自:微冷的雨)

    ORM即 对象-关系映射: 将数据库中的数据关系表,映射为实体对象. 灵动思绪EF(Entity FrameWork) 作者: 微冷的雨  来源: 博客园  发布时间: 2013-01-22 16:2 ...

  4. 高效Web开发的10个jQuery代码片段

    原文转载:http://www.codeceo.com/article/10-jquery-snippets-web-dev.html

  5. Ubuntu 16.10下的 jdk 1.8.0_111

    下载好对应版本的jdk copy到此目录下,并解压: 呼出终端,输入指令: gedit ~/.bashrc 会出现文本编辑界 export JAVA_HOME=/usr/lib/jvm/jdk1.8. ...

  6. 解决:jmeter查看结果树的响应数据提示超过最大值Response too large to be displayed

    问题:用jmeter做接口测试时,查看结果树的数据没有显示全,给出下面的错误提示 Response too large to be displayed. Size: 1349830 > Max: ...

  7. [2015hdu多校联赛补题]hdu5384 Danganronpa

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5384 题意:函数f(A, B)定义:A.B为字符串,f(A, B)为A中有多少个不同的B(ex:f(& ...

  8. exception 'yii\base\ErrorException' with message 'Class 'MongoClient' not found'

    问题描述: 本来项目运行的好好的,搬了一次办公室(电脑主机一起搬的),第二天的时候就登录不了了. php版本和扩展没有改变,且没有修改任何配置,我尝试重启php5-fpm 服务,又重启nginx服务, ...

  9. Redis在windows下安装和PHP中使用

    1.redis简介redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  10. Finder Item脚本如何包装成 Mac App

    第一步,包装 记得之前把一个 java 程序的 jar 包 用 automator包装成了 app, 但自己找不到做法了.回头我想了想 这么实验可行. 这样做成 app 后保存在 /Applicati ...