多线程(1)

多线程(1)_第1张图片
t013b9c86f5a43c0037.jpg

多线程目的:

  • 解决效率问题,我们平时写的代码,大多可以理解为单线程执行,即顺序执行,一个流程执行完成后,再执行另外一个流程,而多线程是一种并发技术,也就是说多程序同时或者极短的时间内来回切换运行。

多线程基础

  • threading.Thread()方法创建线程。
import threading
import time

def run(name):
    print(name,'执行线程')
    time.sleep(5)

#创建线程对象
t1=threading.Thread(target=run,args=("t1",))
t2=threading.Thread(target=run,args=("t2",))

#启动线程
t1.start()
t2.start()
#等待子线程执行完毕后再执行主线程之后的内容
t1.join()
t2.join()
print('执行完毕')

结果:

t1 执行线程
t2 执行线程
执行完毕

创建线程类

  • 我们在实际运用中,更多的是采用自定义的多线程,也就是创建线程类,继承threading模块。
import threading
import time
class Myspider(threading.Thread):
    def __init__(self,name):
        threading.Thread.__init__(self)
        self.name=name

    def run(self):
        print("开始线程"+self.name)
        print('线程执行中111111')
        time.sleep(1)
        print('线程执行中222222')
        time.sleep(1)
        print('线程执行中333333')
        time.sleep(1)
        print('线程执行中444444')
        time.sleep(1)
        print('线程执行中555555')
        time.sleep(1)

#创建线程
t1=Myspider("t1")
t2=Myspider("t2")
t3=Myspider("t3")

#开始线程
t1.start()
t2.start()
t3.start()

t1.join()
t2.join()
t3.join()

print("执行完了")

结果:由于没有加线程锁,所以会有混乱的情况出现。

开始线程t1
开始线程t2线程执行中111111

线程执行中111111
开始线程t3
线程执行中111111
线程执行中222222
线程执行中222222
线程执行中222222
线程执行中333333线程执行中333333

线程执行中333333
线程执行中444444
线程执行中444444
线程执行中444444
线程执行中555555
线程执行中555555
线程执行中555555
执行完了

队列使用

  • Queue为多线程提供一种先进先出的方法,相当于工厂中的生产调度,对计划任务进行有序的安排执行。
  • maxsize=10 允许队列的最大线程。
import queue
q=queue.Queue(maxsize=10)
for i in range(1,11):
    q.put(i)#向队列中放值
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
while not q.empty():#如果线程不为空,则执行。
    print(q.get())

结果:

1
2
3
4
5
6
7
8
9
10

你可能感兴趣的:(多线程(1))