python-threading

#!/usr/bin/env python
#coding:utf-8
#单线程,比如想让程序运行music函数和move函数,那程序它会先执行music()再执行move(),就会比较>耗时间
from time import ctime,sleep
def music():
    for i in range(2):#执行睡眠2次一秒
        print "I was listening to music. %s" %ctime()
        sleep(1)
def move():
    for i in range(2):#执行睡眠2次5秒
        print "I was at the movies! %s" %ctime()
        sleep(5)
if __name__ == '__main__':
    music()
    move()
    print "all over %s" %ctime()

#!/usr/bin/env python
#coding=utf-8
import threading
from time import ctime,sleep
def music(func):#定义一个音乐的函数,打印歌曲2次,时间间隔为一秒
    for i in range(2):
        print "I was listening to %s. %s" %(func,ctime())
        sleep(1)
def move(func):#定义一个音乐的函数,打印电影2次,时间间隔为五秒
    for i in range(2):
        print "I was at the %s! %s" %(func,ctime())
        sleep(5)
threads = []#创建一个数组
th1 = threading.Thread(target=music,args=(u'我以为-品冠',))#创建线程th1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程th1装到threads数组中。
threads.append(th1)
th2 = threading.Thread(target=move,args=(u'功夫足球-周星驰',))
threads.append(th2)
    if __name__ == '__main__':
        for t in threads:#最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)
        t.setDaemon(True)#将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置>为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print "all over %s" %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。
        t.start()

    t.join()
    print "all over %s" %ctime()
'''先把倒数第二的t.join()方法注释掉,从执行结果来看,子线程(muisc 、move )和主线程(print "all over %s" %ctime())都是同一时间启动,但由于主线程执行完结束,所以导致子线程也终止,所>以这个小脚本还不完整。 但是我们只对上面的程序加了个join()方法,用于等待线程终止。join()的
作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞,所以可以可以试一下没有加join>方法和加join方法的区别。 注意:  join()方法的位置是在for循环外的,也就是说必须等待for循环里
的两个进程都结束后,才去执行主进程。'''
                                          

原文地址:https://www.cnblogs.com/wudongyu/p/6536703.html