Python 多线程threading模块

首先,我们在了解多线程时需要理解的就是什么是多线程,按照官方的解释就是:多线程英语multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。

在我自学到这里的时候,通过会在想进程和线程到底是有什么区别,我的理解就是:

进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,一个进程可以包含多个线程。

下面就以简单的例子来加强我们对python 线程的理解。

  1. 默认情况下,我们在没有启动线程的时候,可以看一下程序总的运行时间,应该是每个函数的时间之和,以下程序应该是10S的时间。
# -*- coding: utf-8  -*-
from time import sleep,ctime
import threading
from time import sleep,ctime
import threading
def music(fun):
    for i in range(2):
        print ‘music %s‘  % fun,ctime()
        sleep(2.5)   #这里以每首歌为例,放完需要5s时间 
    
def move(fun):
    for i in range(2):
        print ‘move!! %s‘ % fun,ctime()
        sleep(2.5)
if __name__ == ‘__main__‘:
    music(‘小苹果‘)
    move(‘变形金刚‘)
    
print ctime()  #打印最后程序结束时间

程序运行结果:

2. 启动多线程后,再来看一下总的时间,由之前的10s缩短到5s的时间。

# -*- coding: gbk -*-
‘‘‘ 加入线程‘‘‘
import time
import threading
def t1(name,x): 
    print "start: %s" % time.ctime()
    for i in range(x):
        print i,name
        time.sleep(1)   #每执行一次程序停顿1s
        
#创建线程
threads = []
t = threading.Thread(target=t1,args=(‘分手仁师‘,5),)
t2 = threading.Thread(target=t1,args=(‘美丽心情‘,5),)

#将线程加入到线程组
threads.append(t)
threads.append(t2)
#启动线程
for i in threads:
    i.start()
i.join()
#主进程
print "end: %s" % time.ctime()

运行结果:

我们除了用多线程之外 ,python 还提供了多进程模块,其原理都差不多,这里不再进行复述,咱们就看下实际的例子吧。

# -*- coding: gbk -*-
from time import sleep,ctime
import multiprocessing
def super_player(file,time):
    for i in range(2):
        print "Start playing: %s! %s" %(file,ctime())
        sleep(time)
        
#播放文件与播放时长
list = {‘love.mp3‘:2, ‘a_fan_da.mp4‘:5 , ‘i_and_you.mp3‘:4}
threads = []
files = range(len(list))
#创建多进程
for file,time in list.items():
    t = multiprocessing.Process(target=super_player,args=(file,time))
    threads.append(t)
    
if __name__ == ‘__main__‘:
    for i in files:
        threads[i].start()
    for i in files:
        threads[i].join()
#主进程
print ctime()

通过以上例子我们大概可以知道启用多线程程序的好处,一个是多线程技术使程序的响应速度更快 ,改善程序结构。再一个,某些特殊场景体验要好。

(例如:1个主页 里面有30个模块 30个模块分别读取数据库的数据这个页面 如果不用多线程,你开打以后,会看到白页,10秒以后 所有模块一瞬间看到

而多线程,打开页面的第一秒 页面就打开了 这时候 页面上只有3个模块 然后 每过1秒 漫漫的 都显示出来)


以上是我个人对多线程的浅薄理解。

Python 多线程threading模块,布布扣,bubuko.com

时间: 2024-10-12 20:09:49

Python 多线程threading模块的相关文章

python多线程-threading模块

threading 是我们常用的用于 python 多线程的模块,其功能更加丰富.下面我们就来开始学习这个模块. 同样的,我这里声明一样我使用的版本是 python2.7,不同版本直接可能存在差异. 老规矩,使用 help() 函数获取帮助文档,看看里面有什么内容. threading 模块中提供了一个 thread 的类,注意不要和 thread 模块搞混了,两者差别还是很大的.thread 这个类可以实例化一个对象,每个对象代表一个线程,可以调用其中的 run() 方法来开启一个线程的运行.

再看python多线程------threading模块

现在把关于多线程的能想到的需要注意的点记录一下: 关于threading模块: 1.关于 传参问题 如果调用的子线程函数需要传参,要在参数后面加一个","否则会抛参数异常的错误. 如下: 1 for i in xrange(5): 2 threads.append(threading.Thread(target=worker,args=(i,))) 2.关于join()阻塞 join()方法一旦被调用,这个线程就会被阻塞住,等其他线程执行完才执行自身.当我们在主线程A中,创建了n个子线

python中threading模块详解(一)

python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thread模块更高层的API来提供线程的并发性.这些线程并发运行并共享内存. 下面来看threading模块的具体用法: 一.Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行. 这里对使用多线程并发,和不适用多线程并发做

python 的threading模块

其中Thread类 是你主要的线程类,可以创建进程实例.该类提供的函数包括: getName(self) 返回线程的名字 isAlive(self) 布尔标志,表示这个线程是否还在运行中 isDaemon(self) 返回线程的daemon标志,将线程放入后台执行 join(self, timeout=None) 程序挂起,直到线程结束,如果给出timeout,则最多阻塞timeout秒,主线程需等待子线程完成 run(self) 定义线程的功能函数 setDaemon(self, daemon

python多线程-thread模块

thread 和 threading 模块都能够实现 python 中的多线程,一般而言使用 threading 更加方便,因为 thread 有很多的缺点,例如当主线程结束后,所以子线程都会强制终止掉,没有警告也没有正常的清理工作.所以一般情况下更推荐使用 threading 模块.不过出于学习的目的,我们两个模块都来看一下. 在进行代码学习之前,我们要先来了解 python 的 GIL,也就是全局解释器锁.这个锁保证了同一时刻只能有一个线程运行. 等等……我明明要使用多线程,为什么这个锁却保

Py西游攻关之多线程(threading模块)

线程与进程 什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 A thread is an execution context, which is all the information a CPU needs to execute a stream of instructions. Suppose you're reading a

多线程threading模块

threading模块是python中专门提供用来做多线程的模块.threading中最常用的类是thread. 查看线程数量函数:threading.enumerate() 查看线程当前名字函数:threading.current_thread() 以下看一个简单的多线程程序: #encoding: utf-8#采用多线程的方式import threadingimport time def coding(): for x in range(3): print('正在写代码%s'%threadi

Python之threading模块简单使用

下面的代码来自<Python核心编程>(第二版)一书. threading模块对象 说明 Thread 表示一个线程的执行的对象 Lock 锁原语对象(跟thread模块里的锁原语对象相同) RLock 可重入锁对象.使单线程可以再次获得已经获得了的锁(递归锁定) Condition 条件变量对象能让一个线程停下来,等待其他线程满足了某个"条件".如,状态的改变或值得改变 Event 通用的条件变量,多个线程可以等待某个事件的发生,在事件发生后,所有的线程都会被激活 Sem

python之多线程threading模块

#_*_coding:utf-8_*_ import threading from time import sleep,ctime #秒数 loops = [4,2] #这个函数是模拟一个实实在在是用来干活的函数 def loop(nloop,nsec):     print "函数%s 启动时间:%s 等待秒数:%s \n" %(nloop,ctime(),nsec)     sleep(nsec) #等待时间 def main():     print "主线程在 %s