[Python] 多线程编程

长平狐 发布于 2013/06/03 15:03
阅读 159
收藏 0

Python 提供了几个用于多线程编程的模块,包括thread, threading 和Queue 等。thread 和threading 模块允许程序员创建和管理线程。thread 模块提供了基本的线程和锁的支持,而threading提供了更高级别,功能更强的线程管理的功能。Queue 模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构。

注意:避免使用thread模块,因为它不支持守护线程。当主线程退出时,所有的子线程不论它们是否还在工作,都会被强行退出。

下面重点说说threading模块。

我们的多线程继承threading模块里的Thread类,它的主要函数有:

函数                                   描述
start()                                开始线程的执行
run()                                   定义线程的功能的函数(一般会被子类重写)
join(timeout=None)        程序挂起,直到线程结束;如果给了timeout,则最多阻塞timeout 秒
getName()                        返回线程的名字
setName(name)             设置线程的名字
isAlive()                             布尔标志,表示这个线程是否还在运行中
isDaemon()                     返回线程的daemon 标志

setDaemon(daemonic) 把线程的daemon 标志设为daemonic(一定要在调用start()函数前调用)

下面是一个例子:

import threading
import time

class mythread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self.num = num
    def run(self):
        if self.num < 2:
            time.sleep(self.num);
        print self.num
        
if __name__ == '__main__':
    nums=[1,2,3,4,5]
    for num in nums:
        t = mythread(num)
        t.start()

在main函数里,同时启动5个线程,如果num < 3,就先休眠一会儿,因此2,3,4,5最先被打印出来,1最后被打印出来。



原文链接:http://blog.csdn.net/u010415792/article/details/8912510
加载中
0
osDaniel
osDaniel

"在main函数里,同时启动5个线程,如果num < 3,就先休眠一会儿,因此2,3,4,5最先被打印出来,1最后被打印出来。"

如果num<3,那么2,1分别会进入sleep,并且2会sleep 2s,1会sleep 1s,此时应该先打印3,4,5(顺序不定),然后才是应该打印1,最后才是2.

0
TBWU
TBWU

引用来自“osDaniel”的评论

"在main函数里,同时启动5个线程,如果num < 3,就先休眠一会儿,因此2,3,4,5最先被打印出来,1最后被打印出来。"

如果num<3,那么2,1分别会进入sleep,并且2会sleep 2s,1会sleep 1s,此时应该先打印3,4,5(顺序不定),然后才是应该打印1,最后才是2.

是的,可能是博主.    "在main函数里,同时启动5个线程,如果num < 3,就先休眠一会儿,因此2,3,4,5最先被打印出来"  这里正确的是num<2 ,  博主误写成了num<3了
返回顶部
顶部