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)) 

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

      

  • 相关阅读:
    Bash awk 基本入门
    MFC 创建文件
    MFC listbox array 使用
    MFC CString 字符串截取
    CStudioFile 读取 txt 文件数据
    C++ 取整 取余
    MFC 单文档应用程序 dialog 变量传递
    MFC 字符串截取成数组 wcstok
    写入文件
    MFC dialog 间 交互[2]
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/9383478.html
Copyright © 2011-2022 走看看