您的位置:首页 > 编程语言 > Python开发

python中线程的使用

2012-08-17 15:35 232 查看
/article/7605071.html

线程启动之后,会执行一个函数,当该函数执行完之后,线程也就结束了,该函数只被执行一次。

下面我以问题的形式,给出一些我的理解。

想让线程不停地运行,该怎么实现?一般有2种方法:

(1)在该线程执行的函数中,设置一个死循环,即while true。当线程调用该函数时,则该函数就会陷入了死循环。当满足某种条件之后,可以通过break退出该循环。本blog中介绍的“双线程高效下载问题”和“多线程概述”中给出的代码,都是这种方法。

(2)重写线程中的run方法中,设置一个死循环,即while true,其他和方法一类似。

那如何实现每隔一段时间执行一次线程,即线程定时触发执行?

可以通过在线程的循环中设置一个sleep方法,如time.sleep(30),则该线程每隔30秒之后就休眠,放弃cpu的使用权,30秒之后,再加入线程队列,等待调用。即实现了我们的定时触发线程的效果。

python使用线程是非常方便的,通过调用threading模块就可以立刻使用。

下面给出一个python中thread的demo,可以复制,然后保存就可以运行。该demo是通过重写run方法,在run中使用while true来循环,并在run中使用sleep(30),来实现定时触发。

[python] view
plaincopy

#!/usr/bin/python

# -*-coding:utf-8 -*-

import sys;

import os;

import time;

import threading;

class MTimerClass(threading.Thread): # cookie监控时钟

def __init__(self,fn,args=(),sleep=1):

threading.Thread.__init__(self)

self.fn = fn

self.args = args

self.sleep = sleep

self.setDaemon(True)

self.isPlay = True #当前是否运行

self.fnPlay = False #当前已经完成运行

self.thread_stop=False;

def SetSleep(self,sleep): # 重新设置 时间间隔

self.sleep=sleep;

def __do(self):

self.fnPlay = True;

apply(self.fn,self.args);

self.fnPlay = False

def run(self):

while self.isPlay :

if self.thread_stop==True:

break;

#if SubCommon.ifexeStop==True: #可以外部调用 来关掉线程。

# print 'thread break'

# break;

#print self.sleep;

time.sleep(self.sleep)

self.__do();

def stop(self):

#stop the loop

self.thread_stop = True;

self.isPlay = False;

while True:

if not self.fnPlay : break

time.sleep(0.01)

def GetSearchinfo():

print 'hhhhh...';

# to do

pass;

def main():

tCheck=MTimerClass(GetSearchinfo, '', 60);

tCheck.setDaemon(True); # 随主线程一起结果

tCheck.start(); #线程启动

if __name__== "__main__":

main();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: