python多线程实践小结

参考:http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html

#!/usr/bin/env python
import sys
import threading

import serial
#from threading import Thread
from time import sleep

sub_msg_lock = threading.Lock()

class thread1_test(threading.Thread):

    def __init__(self,para_for_thread1,name=‘wang_thread1‘):
        threading.Thread.__init__(self)
        self.thread1_num = para_for_thread1
        #self.thread1_stop_flag = False

    def run(self):#name must is:run
        thread1_count = 0
        while thread1_count < 10:#not self.thread1_stop_flag
            print("thread1 started")
            sleep(0.5)
            self.thread1_num = self.thread1_num + 1
            print("thread1_num:",self.thread1_num)
            thread1_count += 1

    #def thread1_stop(self):
        #self.thread1_stop_flag = True

class thread2_test(threading.Thread):

    def __init__(self,para_for_thread2,name=‘wang_thread2‘):
        threading.Thread.__init__(self)
        self.thread2_num = para_for_thread2
        #self.thread2_stop_flag = False

    def run(self):
        thread2_count = 0
        while thread2_count < 10:#not self.thread1_stop_flag
            print("thread2 started")
            sleep(1)
            self.thread2_num = self.thread2_num + 1
            print("thread2_num:",self.thread2_num)
            thread2_count += 1

    def thread2_stop(self):
        #thread2_test_instance = thread2_test()
        #thread2_name = thread2_test_instance.getName()
        #wrong: getName() is method of thread,so must used by instance of thread
        #self.thread2_stop_flag = True

if __name__ == ‘__main__‘:#this is the main thread
    thread1 = thread1_test(0)
    thread2 = thread2_test(100)

    thread1.setDaemon(True)
    thread2.setDaemon(True)
    thread1.start()
    thread2.start()
    sleep(1)

    thread1_name = thread1.getName()
    print("thread1_name:",thread1_name)
    thread2_name = thread2.getName()
    print("thread2_name:",thread2_name)

    thread1_isdaemon = thread1.isDaemon()
    #default Flase: means the son thread will not died with main thread (son has freedom)
    #we can through setDaemon(True) to make son threads die with main thread (son can not longer than main) = (main died son must died,son can ealyer died than mian)
    print("thread1_isdaemon:",thread1_isdaemon)
    thread2_isdaemon = thread2.isDaemon()
    print("thread2_isdaemon:",thread2_isdaemon)

    #thread1.thread1_stop()
    #thread2.thread2_stop()

    thread1_isalive = thread1.isAlive()
    print("thread1_isalive:",thread1_isalive)
    thread2_isalive = thread2.isAlive()
    print("thread2_isalive:",thread2_isalive)

    #thread1.join()
    thread2.join(7)#main thread wait thread1 and thread2 then main thread go on
    #sleep(3)
    print ("mian thread terminate!")
    print ("All threads terminate!")

关于线程的方法:

就我个人而言,比较喜欢第二种方式,即创建自己的线程类,必要时重写threading.Thread类的方法,线程的控制可以由自己定制。

threading.Thread类的使用:

1,在自己的线程类的__init__里调用threading.Thread.__init__(self, name = ‘threadname‘) 其中threadname为线程的名字

2, run(),通常需要重写,编写代码实现做需要的功能。

3,getName(),获得线程对象名称

4,setName(),设置线程对象名称

5,start(),启动线程

6,jion([timeout]),等待另一线程结束后再运行。不设置timeout则等待该线程结束,设置timeout后,最多等待线程timeout这么长时间,然后继续运行下面的程序.

7,setDaemon(bool),设置子线程是否随主线程一起结束,必须在start()之前调用。默认为False,即子线程自由与主线程.否则,主线程结束时不管子线程是否结束,都会结束子线程.

8,isDaemon(),判断线程是否随主线程一起结束。

9,isAlive(),检查线程是否在运行中。

此外threading模块本身也提供了很多方法和其他的类,可以帮助我们更好的使用和管理线程。可以参看http://www.python.org/doc/2.5.2/lib/module-threading.html

时间: 2024-10-15 06:20:10

python多线程实践小结的相关文章

多线程实践—Python多线程编程

多线程实践 前面的一些文章和脚本都是只能做学习多线程的原理使用,实际上什么有用的事情也没有做.接下来进行多线程的实践,看一看在实际项目中是怎么使用多线程的. 图书排名示例 Bookrank.py: 该脚本通过单线程进行下载图书排名信息的调用 ? 1 from atexit import register 2 from re import compile 3 from threading import Thread 4 from time import sleep, ctime 5 import

基于Windows平台的Python多线程及多进程学习小结

python多线程及多进程对于不同平台有不同的工具(platform-specific tools),如os.fork仅在Unix上可用,而windows不可用,该文仅针对windows平台可用的工具进行总结. 1.多线程 单线程中,如果某一任务(代码块)是long-time running的,则必须等待该任务(代码块)结束,才可以对下一个任务进行操作,为解决long-time 任务的block问题,可将创建多个线程,间隔选择多线程进行操作.python 中多线程常用的库为_thread,thr

python读取文件小结

python读取文件小结 你想通过python从文件中读取文本或数据. 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = open('thefile.txt').read( )     # 文本文件中的所有文本 all_the_data = open('abinfile','rb').read( )    # 二进制文件中的所有数据 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用的文件对象占用

Python 多线程教程:并发与并行

Python 多线程教程:并发与并行 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为“GIL”)指指点点,说它阻碍了Python的多线程程序同时运行.因此,如果你是从其他语言(比如C++或Java)转过来的话,Python线程模块并不会像你想象的那样去运行.必须要说明的是,我们还是可以用Python写出能并发或并行的代码,并且能带来性能的显著提升,只要你能顾及到一些事情.如果你还没看过的话,我建议你看看

Python多线程问题的资料查找与汇总by tsy

声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途. 2)若本文档内有侵权文字或图片等内容,请联系作者bitpeach删除相应部分. 3)本文档内容涉及Python的多线程问题,没有介绍多线程的概念,没有介绍多线程的程序模块,只是讨论多线程产生的交织问题,并查找一些材料进行佐证和学习. 4)仅仅作为参考用途,抛砖引玉,不作为证据证明用途,请自行取舍,核实引用. 5)本文的超链接,请不要直接点击,为方便阅读,请选择“在新标签页打开”. 非常抱歉,我不是

Python多线程原理与实现

Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本概念 1.1 线程是什么? 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3)

python 多线程实现循环打印 abc

python 多线程实现循环打印 abc 好久没写过python了, 想自己实践一下把 非阻塞版 import threading import time def print_a(): global value global lock global stop_flag while stop_flag: while True: if value == 0 or value == 3: break lock.acquire() value = 1 time.sleep(1) print("aaa&q

python多线程

http://blog.csdn.net/pipisorry/article/details/45306973 CPU-bound(计算密集型) 和I/O bound(I/O密集型) I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高.CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Lo

Python多线程实现方法有几种

目前python多线程实现方式有很多种比如:thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 2.7 版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了 multithreading模块.threading模块里面主要是对一些线程的操作对象化,创建Thread的class.一般来说,使用线程有两种 模式: