threading的简单应用

上一篇 / 下一篇  2015-11-16 16:47:00 / 个人分类:python

说一下使用python多线程:需要导入threading模块。

具体使用是:定义一个要做的具体事情的函数,比如姐最爱的烧开水 15分钟和洗脸5分钟,洗脚5分钟:
def hotwater():
    print 'i am hotting the water!'
def washface():
    print 'i am washing my face!'    
def washfoot():
    print 'i am washing my foot!'   

多线程是干嘛呢?就是统筹算法,9点,我先烧水,然后等水开的这15分钟,我把脸和脚都洗了,然后水开了掺水,9点

15我就把所有的事全干完了
单线程就是,我sb啊,我9点烧水,水开了9点15我才洗脸洗脚,再洗脸,洗脚,一切弄完了9点25

一般想我刚才定义函数那样搞下来,就时单线程了,多线程就是多,快,好,省!
python中如何定义线程呢:threading.Thread()方法,
threads=[]
t1=threading.Thread(target=hotwater,args=())  ----创建线程 调用music方法target=hotwater,args方法对

hotwater进行传参。 把创建好的线程t1装到threads数组中。

for t in threads:
    t.setDaemon(True)
    t.start()

t.setDaemon(True),将线程声明为守护线程,必须在start方法前设置,守护的意思就好比是个守着门口的卫兵,如果里

面没有东西,或者说主线程结束了,那士兵也没有存在价值了,它也就结束了,子线程定义为,我认为是分支去做的事

情,比如刚才的洗脸,洗脚,我把它们弄成子线程,主线程是烧水,烧水的过程中去做子线程的事情,子线程定义为守

护线程呢就是主线程开始了,那我就一直在,但当主线程结束了,我也跟着结束,卫兵啊~

在大B的指点下,这个后来是这样写的,先把洗脸洗脚放进一个函数里,先脸后脚,然后把这个函数和烧水函数放进一个

线程里,就ok了,

from time import ctime,sleep
import threading

def face():
    print ("washing face.%s" %(ctime()))
    sleep(5)


def foot():
    print ("washing foot.%s" %(ctime()))
    sleep(5)


def boilinig():
    print ("boiling water.%s" %(ctime()))
    sleep(15)


def f2():
    face()
    foot()

threads=[]
t5=threading.Thread(target=boilinig)
t6=threading.Thread(target=f2)
threads.append(t5)
threads.append(t6)
if __name__=="__main__":
    for i in threads:
        i.start()
    for i in threads:
        i.join()
    print ('all is over, go to bed! %s' %ctime())
这个的打印结果才是正确的:
boiling water.Mon Nov 16 10:44:24 2015washing face.Mon Nov 16 10:44:24 2015

washing foot.Mon Nov 16 10:44:29 2015
all is over, go to bed! Mon Nov 16 10:44:39 2015,用一个循环去调用join()才是真正把多线程里面的每一个线

程都等待执行完毕了,才去走外面的主线程

注意这里,join()方法的利用,最开始我的写法是:

if __name__=="__main__":
    for i in threads:
        i.setDaemon()
        i.start()
    i.join()
    print ('all is over, go to bed! %s' %ctime())

这个的打印结果是:
boiling water.Mon Nov 16 10:33:02 2015washing face.Mon Nov 16 10:33:02 2015

washing foot.Mon Nov 16 10:33:07 2015
all over,let us go to sleep~ Mon Nov 16 10:33:12 2015

等其中一个线程结束,就打印了,时间上没有等到烧开水完毕就去睡觉去了

TAG:

 

评分:0

我来说两句

Open Toolbar