python多线程
2020-03-24 本文已影响0人
ayusong870
1. threading.Thread
方法一:Thread类
Python的多线程Thread,有一个弊端,其多线程Thread是在一个python虚拟机下运行的,也就是说,无论多少个线程,都是在一个核内运行。
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
#其他
def run(self):
while(conditions):
#代码
Mt = MyThread()
Mt.start()#启动线程
Python的多线程没有强制停止,只能在conditions中增加手动停止的边界条件。
方法二:简单多线程
import threading
from time import ctime,sleep
def music(func):
for i in range(2):
print "I was listening to %s. %s" %(func,ctime())
sleep(1)
def move(func):
for i in range(2):
print "I was at the %s! %s" %(func,ctime())
sleep(5)
threads = []
t1 = threading.Thread(target=music,args=(u'爱情买卖',))
threads.append(t1)
t2 = threading.Thread(target=move,args=(u'阿凡达',))
threads.append(t2)
for t in threads:
t.setDaemon(True)
t.start()
print "all over %s" %ctime()
守护线程
setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。
The entire Python program exits when no alive non-daemon threads are left
上面这句话的意思是:当没有存活的非守护进程时,整个python程序才会退出。
也就是说:如果主线程执行完以后,还有其他非守护线程,主线程是不会退出的,会被无限挂起;必须将线程声明为守护线程之后,如果队列中的数据运行完了,那么整个程序想什么时候退出就退出,不用等待。