线程与非线程示例

"""
这是单线程运行
"""
# import time
# def sing():
#     for x in range(1,6):
#         print("我在唱什么")
#         time.sleep(1)
# def dance():
#     for x in range(1,6):
#         print("我在跳什么")
#         time.sleep(1)
# def main():
#     sing()
#     dance()
#
# if __name__ == '__main__':
#     main()


"""
一个主线程 两个子线程   面向过程方式
"""
# import  threading
# import time
#
#
# def dance(a):
#     print("接收参数为a")
#     for x in range(1,6):
#         print("我在跳什么")
#         time.sleep(1)
#
#
# def sing(a):
#     #获取当前线程的名字
#     print("接收参数为a,当前线程名字为%s" %threading.current_thread().name)
#     for x in range(1,6):
#         print("我在唱什么")
#         time.sleep(1)
#
#
# def main():
#     a = "孙悟空"
#     #创建唱歌线程  参数依次为开始执行的函数名 线程的名字 线程运行所需的参数
#     tsing = threading.Thread(target=sing,name = "唱歌",args =(a,) )
#     #创建跳舞线程
#     tdance = threading.Thread(target=dance,name = "跳舞",args =(a,))
#     #启动线程
#     tsing.start()
#     tdance.start()
#     #注意:要让主线程在等待子线程结束后再结束 否则删除分配空间可能会删除不干净
#     tsing.join()#jdon()函数代表子线程结束了才能运行主线程
#     tdance.join()
#     #这里是主线程
#     print("这里是主线程")
#
# if __name__ == '__main__':
#     main()

"""
面向对象的方式使用多线程
"""
import threading
import time

#写一个类,继承自threading.Thread
class SingThread(threading.Thread):
    #传递参数进去
    def __init__(self,name,a):
        #需要先调用一下父类
        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 run(self):
        #需要先调用一下父类
        super().__init__()
        for x in range(1,6):
            print("我在跳崖")
            time.sleep(1)
#在主函数中使用线程
def main():
    #创建线程
    tsing = SingThread('sing','张三')
    tdance = DanceThread()
    #启动线程
    tsing.start()
    tdance.start()
  #当然如果要对文件操作,还需要一些加锁解锁的操作
#让主线程等待进程结束 tsing.join() tdance.join() if __name__ == '__main__': main()
posted @ 2020-01-12 20:16  求知鱼  阅读(332)  评论(0编辑  收藏  举报