美文网首页
Python中的多线程threading模块

Python中的多线程threading模块

作者: o小女巫o | 来源:发表于2018-12-21 11:10 被阅读0次

Python有专门的线程模型.在Python中我们主要是通过thread和 threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用 threading模块实现多线程编程。

实现模块:

thread:多线程的底层支持模块,一般不建议使用;

threading:对thread进行了封装,将一些线程的操作对象化

threading模块:

Thread 线程类,这是我们用的最多的一个类,你可以指定线程函数执行或者继承自它都可以实现子线程功能;

Timer与Thread类似,但要等待一段时间后才开始运行;

Lock 锁原语,这个我们可以对全局变量互斥时使用;

RLock 可重入锁,使单线程可以再次获得已经获得的锁;

Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”;

Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活;

Semaphore为等待锁的线程提供一个类似“等候室”的结构;

BoundedSemaphore 与semaphore类似,但不允许超过初始值;

Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。

其中Thread类:是主要的线程类,可以创建进程实例。该类提供的函数包括:

Thread()创建线程

getName(self) 返回线程的名字

isAlive(self) 布尔标志,表示这个线程是否还在运行中

isDaemon(self) 返回线程的daemon标志

join(self, timeout=None) 程序挂起,直到线程结束,如果给出timeout,则最多阻塞timeout秒

run(self) 定义线程的功能函数

setDaemon(self, daemonic) 把线程的daemon标志设为daemonic

setName(self, name) 设置线程的名字

start(self) 开始线程执行

其中Queue提供的类:

Queue队列

LifoQueue后入先出(LIFO)队列

PriorityQueue 优先队列

多线程threading的简单使用:

定义方法(不同的线程需要执行)->创建数组,用来放不同的线程 ->创建线程,并添加到数组中->运行线程,start()

以下是示例代码.py

# coding=utf-8

import threading
import time

###  threading 的简单使用。

def method1(n):
    temp=str(time.asctime())
    #print n
    print('这是method1运行的时间:'+temp)

def method2():
    temp = str(time.asctime())
    time.sleep(3)
    print('这是method2运行的时间:' + temp)
    time.sleep(3)
    print('method2延时3s运行结束')

threads=[]   #创建threads数组

##创建线程使用threading.Thread()方法,target=方法名,args=调用方法的参数,没有可none,但args要是()

t1=threading.Thread(target=method1,args=('h',))
t2=threading.Thread(target=method2,)

##将单个线程添加到threads数组中
threads.append(t1)
threads.append(t2)

## 遍历threads数组中的元素,。start()开始执行线程

for i in threads:
    '''
    setDaemon()方法是将线程声明为守护线程,必须在start()方法之前进行设置,如果不设置为守护线程会被无限挂起;
    子线程如启动后,父线程也继续执行下去,当父线程执行完最后一条语句后,没有等待子线程结束。同时子线程也结束了。

    '''
    #i.setDaemon(True)    #ture,父线程结束和子线程同时结束
                         #不设置,则主线程all over结束之后,还会继续执行未结束的子线程。
    i.start()

i.join()    #join()方法在for遍历循环之外,必须等待for里的循环结束之后,才能继续执行主线程,即下面得代码

print('ALL OVER')

相关文章

  • 多线程

    threading 模块 在 Python 中实现多线程,可以利用 threading 模块中的 Thread 来...

  • python多线程

    1.通过threading模块使用多线程 python中多线程的方式是引用threading模块 2.Thread...

  • 线程

    多线程--threading python的thread模块是比较底层的模块,python的threading模块...

  • 1.6.1 Python线程使用 -- threading

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是...

  • 线程实战

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是...

  • Python中线程的理解

    Num01-->多线程threading Python中建议使用threading模块,而不要使用thread模块...

  • 06.系统编程-2.线程

    1、多线程-threading python的thread模块是比较底层的模块,python的threading模...

  • 线程 threading

    1. 多线程-threading python的thread模块是比较底层的模块,python的threading...

  • Python 多线程 threading和multiproces

    Python 多线程 threading和multiprocessing模块 Python中常使用的线程模块 th...

  • python多线程编程

    python提供多线程编程模块有三个:thread、threading、Queen,主要使用threading模块...

网友评论

      本文标题:Python中的多线程threading模块

      本文链接:https://www.haomeiwen.com/subject/lbhmkqtx.html