zoukankan      html  css  js  c++  java
  • 如何进行多线程编程

    #对于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)) 

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

      

  • 相关阅读:
    图像旋转中原图16×16分块测试1
    散射对成像的影响、图像退化
    图像分块后相邻像素点旋转过程中对块内信息的利用率估算
    图像分块测试记录(还不对)
    【戏言、昔言、惜言】谭惜言写了一辈子的戏,真情假意,全在戏言里。
    照花台、无锡景、探清水河调
    Python3.x:chrome运行webdriver脚本提示--ignore-certificate-errors
    Python3.x:pip命令安装第三方库,超时处理方案
    Python3.x:抢票
    Python3.x:定时任务实现方式
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/9383478.html
Copyright © 2011-2022 走看看