对于python 多线程的理解,摸索了一天半 令我真的头秃
from time import sleep,ctime
import logging
import threading # 首先导入threading 模块,这是使用多线程的前提。
logging.basicConfig(level=logging.INFO)
loops = [2,4]
def loop(nloop,nsec):
logging.info("start loop"+str(nloop)+ctime())
sleep(nsec)
logging.info("end loop"+str(nloop) + ctime())
def main():
logging.info("start all at" + ctime())
thread = []
nloops = range(len(loops))
for i in nloops:
t = threading.Thread(target=loop,args=(i,loops[i]))
thread.append(t)
"""
这里第一个循环的意思
创建了thread数组,创建线程t,使用threading.Thread()方法,
在这个方法中调用loop方法target=loop,args方法对loop方法进行传参。 把创建好的线程t装到threads数组中。
start nloop0 nloop1 一起运行
nloop0 间隔2s nloop1 间隔了4秒
"""
for i in nloops:
thread[i].start() # 开始2个线程活动。
for i in nloops:
thread[i].join() # 用于等待线程终止。join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
logging.info("end all at " + ctime())
if __name__ == '__main__':
main()
第二个示例
from time import sleep, ctime
import threading
def music(name):
for i in range(2):
print("I listen now", name, ctime())
sleep(3)
def move(name):
for i in range(2):
print("I listen now", name, ctime())
sleep(2)
threds = []
t1 = threading.Thread(target=music, args=("凤凰传奇",))
threds.append(t1)
t2 = threading.Thread(target=move, args=("阿凡达",))
threds.append(t2)
if __name__ == '__main__':
print("The main process starts", ctime())
for i in threds:
i.setDaemon(True)
i.start()
i.join()
print("The main process ends", ctime())