我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python-thread & thre

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python-thread & thre

参考:http://blog.csdn.net/eastmount/article/details/50155353

# 1、没有线程的例子
# 使用time.sleep()函数来演示线程的工作,这个例子主要为后面线程做对比。
# time.sleep()需要一个浮点型的参数,来指定“睡眠”的时间(单位秒)。这就相当于程序的运行会被挂起指定的时间。
# 代码解释:两个计时器,loop0睡眠4秒,loop1()睡眠2秒,它们是在一个进程或者线程中,顺序地执行loop0()和loop1(),那总运行时间为6秒。有可能启动过程中会再花些时间。

from time import sleep, ctime 

def loop0():  
    print 'Start loop 0 at:', ctime()  
    sleep(4)  
    print 'Loop 0 done at:', ctime() 

def loop1():  
    print 'Start loop 1 at:', ctime()  
    sleep(2)  
    print 'Loop 1 done at:', ctime() 

def main():  
    print 'Starting at:', ctime()  
    loop0()  
    loop1()  
    print 'All done at:', ctime() 

if __name__ == '__main__':  
    main()
# result:
Starting at: Wed Jul 26 23:10:41 2017
Start loop 0 at: Wed Jul 26 23:10:41 2017   # loop0() sleep(4)
Loop 0 done at: Wed Jul 26 23:10:45 2017
Start loop 1 at: Wed Jul 26 23:10:45 2017   # loop1() sleep(2)
Loop 1 done at: Wed Jul 26 23:10:47 2017
All done at: Wed Jul 26 23:10:47 2017
[Finished in 6.1s]
# 2、避免使用thread模块
#          Python提供了几个用于多线程编程的模块,包括thread、threading和Queue等。
#          (1) thread模块: 允许程序员创建和管理线程,它提供了基本的线程和锁的支持。
#          (2) threading模块: 允许程序员创建和管理线程,它提供了更高级别,更强的线程管理的功能。
#          (3) Queue模块: 允许用户创建一个可用于多个线程间共享数据的队列数据结构。
#          下面简单分析为什么需要避免使用thread模块?
#          (1) 首先更高级别的threading模块更为先进,对线程的支持更为完善,而且使用thread模块里的属性有可能会与threading出现冲突。
#          (2) 其次,低级别的thread模块的同步原语很少(实际只有一个),而threading模块则有很多。
#          (3) 另一个原因是thread对你的进程什么时候应该结束完全没有控制,当主线程结束时,所有的线程都会被强制结束掉,没有警告也不会有正常的清除工作。而threading模块能确保重要的子线程退出后进程才退出。
#          当然,为了你更好的理解线程,还是会对thread进行讲解。但是我们只建议那些有经验的专家想访问线程的底层结构时,才使用thread模块。而如果可以,你的第一个线程程序应尽可能使用threading等高级别的模块。

 

# 3、Thread模块实现多线程

# -*- coding: utf-8 -*-
import thread
from time import sleep, ctime
def loop0():
    print 'Start loop 0 at:', ctime()
    sleep(4)
    print 'Loop 0 done at:', ctime()
def loop1():
    print 'Start loop 1 at:', ctime()
    sleep(2)
    print 'Loop 1 done at:', ctime()
def main():
    try:
        print 'Starting at:', ctime()
        thread.start_new_thread(loop0, ())
        thread.start_new_thread(loop1, ())
        sleep(6)                            #同步:主线程等待子线程结束后,再结束;否则,直接关闭子线程,没有提示
        print 'All done at:', ctime()
    except Exception,e:      
        print 'Error:',e  
    finally:    
        print 'END\n' 
if __name__ == '__main__':
    main()
# result:
Starting at: Thu Jul 27 08:54:20 2017
Start loop 0 at: Thu Jul 27 08:54:20 2017
Start loop 1 at: Thu Jul 27 08:54:20 2017
Loop 1 done at: Thu Jul 27 08:54:22 2017
Loop 0 done at: Thu Jul 27 08:54:24 2017
All done at: Thu Jul 27 08:54:26 2017
END
# 4、线程加锁方法
#         那么,有什么好的管理线程的方法呢?而不是在主线程里做个额外的延时6秒操作。因为总的运行时间并不比单线程的代码少;
#         而且使用sleep()函数做线程的同步操作是不可靠的;如果循环的执行时间不能事先确定的话,这可能会造成主线程过早或过晚的退出。
#         这就需要引入锁的概念。下面代码执行loop函数,与前面代码的区别是不用为线程什么时候结束再做额外的等待了。
#         使用锁之后,可以在两个线程都退出后,马上退出。
#coding=utf-8
import thread 
from time import sleep, ctime 
 
loops = [4,2]                           #等待时间
#锁序号 等待时间 锁对象
def loop(nloop, nsec, lock):
    print 'start loop', nloop, 'at:', ctime() 
    sleep(nsec) 
    print 'loop', nloop, 'done at:', ctime()
    lock.release()                      #解锁                  
 
def main():
    print 'starting at:', ctime()
    locks =[]
    nloops = range(len(loops))          #以loops数组创建列表并赋值给nloops
         
    for i in nloops:
        lock = thread.allocate_lock()   #创建锁对象
        lock.acquire()                  #获取锁对象 加锁
        locks.append(lock)              #追加到locks[]数组中
    #执行多线程 (函数名,函数参数)
    for i in nloops:
        thread.start_new_thread(loop,(i,loops[i],locks[i]))
    #循环等待顺序检查每个所都被解锁才停止    
    for i in nloops:
        while locks[i].locked():
            pass
    print 'all end:', ctime()
if __name__ == '__main__': 
    main()
# result:
starting at: Thu Jul 27 17:05:25 2017
start loop 0 at: Thu Jul 27 17:05:25 2017
start loop 1 at: Thu Jul 27 17:05:25 2017
loop 1 done at: Thu Jul 27 17:05:27 2017
loop 0 done at: Thu Jul 27 17:05:29 2017
all end: Thu Jul 27 17:05:29 2017
[Finished in 4.5s]
# 5、创建Thread实例,传给它一个函数
#          这第一个例子使用方法一,把函数及其参数如上面Thread模块的例子一样传进去。
#          主要变化包括:添加了一些Thread对象;在实例化每个Thread对象时,把函数(target)和参数(args)都传进去,得到返回的Thread实例。
#          实例化一个Thread调用Thread()方法与调用thread.start_new_thread()之间的最大区别是:新的线程不会立即开始。
#          在你创建线程对象,但不想马上开始运行线程的时候,这是一个很有用的同步特性。
#          threading模块的Thread类有一个join()函数,允许主线程等待线程的结束。

#coding=utf-8  
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))     #列表[0,1]  
          
    #创建线程  
    for i in nloops:  
        t = threading.Thread(target=loop,args=(i,loops[i]))  
        threads.append(t)  
  
    #开始线程  
    for i in nloops:  
        threads[i].start()  
  
    #等待所有结束线程  
    for i in nloops:  
        threads[i].join()  
  
    print 'All end:', ctime()   
  
if __name__ == '__main__':   
    main()
# result
Starting at: Thu Jul 27 20:44:03 2017
Start loop 0 at: Thu Jul 27 20:44:03 2017
Start loop 1 at: Thu Jul 27 20:44:03 2017
Loop 1 done at: Thu Jul 27 20:44:05 2017
Loop 0 done at: Thu Jul 27 20:44:07 2017
All end: Thu Jul 27 20:44:07 2017
[Finished in 4.2s]

# 所有的线程都创建之后,再一起调用start()函数启动线程,而不是创建一个启动一个。
# 而且,不用再管理一堆锁(分配锁、获得锁、释放锁、检查锁的状态等),只要简单地对每个线程调用join()函数就可以了。
# join()会等到线程结束,或者在给了timeout参数的时候,等到超时为止。使用join()比使用一个等待锁释放的无限循环清楚一些(也称“自旋锁”)。
# join()的另一个比较重要的方法是它可以完全不用调用。一旦线程启动后,就会一直运行,直到线程的函数结束,退出为止。
# 果你的主线程除了等线程结束外,还有其他的事情要做(如处理或等待其他的客户请求),那就不用调用join(),只有在你要等待线程结束的时候才要调用join()。
# Thread是线程类,有两种使用方法,直接传入要运行的方法或从Thread继承并覆盖run():

# coding:utf-8
import threading
import time
#方法一:将要执行的方法作为参数传给Thread的构造方法
def action(arg):
    time.sleep(1)
    print 'the arg is:%s\r' %arg

for i in xrange(4):
    t =threading.Thread(target=action,args=(i,))
    t.start()

print 'main thread end!'

#方法二:从Thread继承,并重写run()
class MyThread(threading.Thread):
    def __init__(self,arg):
        super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。
        self.arg=arg
    def run(self):#定义每个线程要运行的函数
        time.sleep(1)
        print 'the arg is:%s\r' % self.arg

for i in xrange(4):
    t =MyThread(i)
    t.start()

print 'main thread end!'


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python-thread & thre

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python-thread & thre

参考:http://blog.csdn.net/eastmount/article/details/50155353# 1、没有线程的例子# 使用time.sleep()函数来演示线程的工作,这个例子主要为后面线程做对比。# time.sl
2023-01-31

python3 - 多线程 - thre

目录一、threading 模块:对线程的处理二、Thread组件2-1 开启线程的方式一(函数)2-2 开启线程的方式二 (类)2-3 Thread 相关内置子方法 2-4 主进程等待新建线程实例2-5 线程共用创造进程内资源2-7 查看
2023-01-31

Python thread socket

从网上参考了一些代码,实现了一个Python实现的基于线程的socket server, 用来实现各种服务系统的原型。放在这里供以后参考。#!/usr/bin/env pythonimport threadingimport SocketS
2023-01-31

Python处理Thread的方式sta

该问题请百度,如何创建和停止Python的Thread线程。解答:Python的threading.Thread对象只能start一次,若想stop之后重新start只能重新生成一个对象,那就每需要就new一个,用完系统自己回收。
2023-01-31

python中thread模块实现多线程

这篇文章将为大家详细讲解有关python中thread模块实现多线程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pyt
2023-06-14

Python中Thread类的作用是什么

本篇文章为大家展示了Python中Thread类的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python Thread类表示在单独的控制线程中运行的活动。有两种方法可以指定这种活动,给
2023-06-17

Python中thread模块的作用是什么

Python中thread模块的作用是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整
2023-06-14

python thread模块怎么实现多线程

这篇文章主要介绍“python thread模块怎么实现多线程”,在日常操作中,相信很多人在python thread模块怎么实现多线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python thread
2023-06-30

python下thread模块创建线程的方法

本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!thread方法对创建线程有效且直
2023-06-20

Python线程池thread pool怎么创建使用

本文小编为大家详细介绍“Python线程池thread pool怎么创建使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python线程池thread pool怎么创建使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
2023-06-30

Python线程编程中的Thread该如何理解

Python线程编程中的Thread该如何理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、线程编程(Thread)1、线程基本概念1.1、什么事线程线程被称为轻量级的
2023-06-22

python开发之thread线程基础实例入门

本文实例讲述了python开发之thread线程基础。分享给大家供大家参考,具体如下: 说到线程,我们要知道啥是串行,啥是并行程序 举个例子: 串行程序,就是一个一个的执行程序#python threading import time ''
2022-06-04

Java Thread in JVM (转)

Java Thread in JVM (转)[@more@]Java Thread in JVM(wang hailong)本文从JVM的角度探讨Java Thread的语法和编译结果。如果需要获得第一手资料,请直接访问以下的资源——Jav
2023-06-03

Thread Safe和None Thread Safe在php中有什么区别

本篇文章为大家展示了Thread Safe和None Thread Safe在php中有什么区别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Windows版的PHP从版本5.2.1开始有Threa
2023-06-15

python开发之thread实现布朗运动的方法

本文实例讲述了python开发之thread实现布朗运动的方法。分享给大家供大家参考,具体如下: 这里我将给大家介绍有关python中thread来实现布朗运动的一个例子 下面是运行效果:代码部分:# Brownian motion --
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录