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程序才会退出。
也就是说:如果主线程执行完以后,还有其他非守护线程,主线程是不会退出的,会被无限挂起;必须将线程声明为守护线程之后,如果队列中的数据运行完了,那么整个程序想什么时候退出就退出,不用等待。

上一篇下一篇

猜你喜欢

热点阅读