1.python线程的简单使用
import time
import threading
def sing(a):
for x in range(1,6):
print('%s接收过来的参数%s'%(threading.current_thread().name,a))
print('我在唱什么')
time.sleep(1)
def dance(a):
for x in range(1,6):
print('%s接收过来的参数%s'%(threading.current_thread().name,a))
print('我在跳舞')
time.sleep(1)
def main():
a='孙悟空'
tsing=threading.Thread(target=sing,name="sing",args=(a,))
#创建唱歌线程
tsdance=threading.Thread(target=dance,name="dance",args=(a,))
#创建跳舞线程
#启动线程
tsing.start()
tsdance.start()
#让主线程在等待子线程结束之后再结束
tsing.join()
tsing.join()
print('主线程')
if __name__=='__main__':
main()
2.面向对象的线程使用 注意线程锁的应用(后面会用到)
import threading
import time
#线程之间共享全局变量 很容易产生数据混乱 这个时候要用锁
#线程锁 谁先抢到 先上锁 谁先使用
'''
创建锁
suo=threading.Lock()
上锁
suo.acquire()
释放锁
suo.release()
队列(queue)
下载线程
解析线程
'''
#面向对象的方式线程 写一个类 继承threading.Thread
class SingThread(threading.Thread):
def __init__(self,name,a):
#面向对象编程 继承_init__方法必须先手动调用父类的构造方法 因为你不知道他做了什么事情
super().__init__()
self.name=name
self.a=a
def run(self):
print('%s接收过来的参数%s'%(self.name,self.a))
for x in range(1,6):
print('我在唱七里香')
time.sleep(1)
class DanceThread(threading.Thread):
def __init__(self,name,a):
super().__init__()
self.name=name
self.a=a
def run(self):
for x in range(1,6):
print('我在跳广场舞')
time.sleep(1)
def main():
tsing=SingThread('dance','猪悟能')
tsdance=DanceThread()
#启动线程
tsing.start()
tsdance.start()
#让主线程在等待子线程结束之后再结束
tsing.join()
tsing.join()
print('子线程和主线程都结束')
if __name__=='__main__':
main()