• 如何进行多线程编程


    #对于io操作来说,多线程比较好。

    #1.通过threading实例化一个对象

    import time

    def get_detail_html(url):

      print('get detail html')

      time.sleep(2) 

      print('get detail html end')

    def get_detail_url(url):

      print("get detail url started")

      time.sleep(2)

      print('get detail url end')

    if __name__ == "__main__":

      args传递参数进去给函数

      thread1 = threading.Thread(target=get_detail_html,args=("",))

      thread2 = threading.Thread(target=get_detail_html,args=("",))

      start_time  = time.time()

      调用start()方法开启线程

      thread1.start()

      thread2.start()

      #需求2:子线程运行完,才运行主线程

      开启join()线程运行完,才能运行主线程

      thread1.join()

      thread2.join()

      print(''last time:{}''.format(time.time-start_time)) 

      

    从上面的代码执行中,我们可以看出主线程运行完,程序并没有退出,进程没有回收资源,而是等其他线程运行完,才回收。

    现在我有个需求,就是主线程运行完,子线程kill掉,直接退出

    (只要在调用start()方法开启线程之前,设置成守护线程就行了,具体该怎么操作,

    #开启守护线程(多线程中的守护线程是等所有的线程运行完毕才kill掉)

    thread1.setDaemon(True),

    thread2.setDaemon(True)

    ----------------------守护线程和join()方法比较重要----------------------------------------

    对于一些简单的可以用上面的方法,对于一些比较复杂的境况,要下面的方法

    class GetDetailHtml(threading.Thread):
    def __init__(self,name):
    super().__init__(name=name)

      #必须要继承threading.Thread类实现run()方法
    def run(self):

        print('get detail html')

        time.sleep(2) 

        print('get detail html end')

       

    class GetDetailUrl(threading.Thread):
    def __init__(self,name):
    super().__init__(name=name)
      
      def run(self):

        print('get detail url')

        time.sleep(2) 

        print('get detail url end')

    if __name__ == "__main__":

      thread1 = GetDetailHtml("get_detail_html")

      thread2 = GetDetailUrl("get_detail_url")

      

      start_time  = time.time()

      调用start()方法开启线程

      thread1.start()

      thread2.start()

      #需求2:子线程运行完,才运行主线程

      开启join()线程运行完,才能运行主线程

      thread1.join()

      thread2.join()

      print(''last time:{}''.format(time.time-start_time)) 

    注意:如果使用线程池还是使用第一种方案。

      

  • 相关阅读:
    角点检测
    25岁董事长给大学生的18条忠告
    10大忠告
    实验常用正交表
    面试必备15题
    专家系统
    深圳租房完全攻略
    你应选什么样的职业?
    托福报名详细过程解说
    Managed Direct3D开发经验浅析
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/9383478.html
Copyright © 2020-2023  润新知