Python
  • Introduction
  • Chapter 1.Notes from research
    • 1.Introduction of Python
    • 2. Build developer environment
      • 2.1.Sublime Text3
      • 2.2.Jupyter(IPython notebook)
        • 2.2.1.Introduction
        • 2.2.2.Basic usage
        • 2.2.3.some common operations
      • 2.3.Github
        • 2.3.1.Create Github account
        • 2.3.2.Create a new repository
        • 2.3.3.Basic operations: config, clone, push
      • 2.4.Install Python 3.4 in Windows
    • 3. Write Python code
      • 3.1.Hello Python
      • 3.2.Basic knowledges
      • 3.3.撰寫獨立python程式
      • 3.4.Arguments parser
      • 3.5.Class
      • 3.6.Sequence
    • 4. Web crawler
      • 4.1.Introduction
      • 4.2.requests
      • 4.3.beautifulSoup4
      • 3.4.a little web crawler
    • 5. Software testing
      • 5.1. Robot Framework
        • 1.1.Introduction
        • 1.2.What is test-automation framework?
        • 1.3.Robot Framework Architecture
        • 1.4.Robot Framework Library
        • 1.5.Reference
    • 6. encode/ decode
      • 6.1.編碼/解碼器的基本概念
      • 6.2.常見的編碼/ 解碼錯誤訊息與其意義
      • 6.3 .處理文字檔案
    • 7. module
      • 7.1.Write a module
      • 7.2.Common module
        • 7.2.1.sched
        • 7.2.2.threading
    • 8. Integrate IIS with django
      • 8.1.Integrate IIS with django
  • Chapter 2.Courses
    • 2.1.Python for Data Science and Machine Learning Bootcamp
      • 2.1.1.Virtual Environment
      • 2.1.2.Python crash course
      • 2.1.3.Python for Data Analysis - NumPy
        • 2.1.3.1.Numpy arrays
        • 2.1.3.2.Numpy Array Indexing
        • 2.1.3.3.Numpy Operations
      • 2.1.4.Python for Data Analysis - Pandas
        • 2.1.4.1.Introduction
        • 2.1.4.2.Series
        • 2.1.4.3.DataFrames
        • 2.1.4.4.Missing Data
        • 2.1.4.5.GroupBy
        • 2.1.4.6.Merging joining and Concatenating
        • 2.1.4.7.Data input and output
      • 2.1.5.Python for Data Visual Visualization - Pandas Built-in Data Visualization
      • 2.1.6.Python for Data Visualization - Matplotlib
        • 2.1.6.1.Introduction of Matplotlib
        • 2.1.6.2.Matplotlib
      • 2.1.7.Python for Data Visualization - Seaborn
        • 2.1.7.1.Introduction to Seaborn
        • 2.1.7.2.Distribution Plots
        • 2.1.7.3.Categorical Plots
        • 2.1.7.4.Matrix Plots
        • 2.1.7.5.Grids
        • 2.1.7.6.Regression Plots
      • 2.1.8. Python for Data Visualization - Plotly and Cufflinks
        • 2.1.8.1.Introduction to Plotly and Cufflinks
        • 2.1.8.2.Plotly and Cufflinks
      • 2.1.9. Python for Data Visualization - Geographical plotting
        • 2.1.9.1.Choropleth Maps - USA
        • 2.1.9.2.Choropleth Maps - World
      • 2.1.10.Combine data analysis and visualization to tackle real world data sets
        • 911 calls capstone project
      • 2.1.11.Linear regression
        • 2.1.11.1.Introduction to Scikit-learn
        • 2.1.11.2.Linear regression with Python
      • 2.1.12.Logistic regression
        • 2.1.12.1.Logistic regression Theory
        • 2.1.12.2.Logistic regression with Python
      • 2.1.13.K Nearest Neighbors
        • 2.1.13.1.KNN Theory
        • 2.1.13.2.KNN with Python
      • 2.1.14.Decision trees and random forests
        • 2.1.14.1.Introduction of tree methods
        • 2.1.14.2.Decision trees and Random Forests with Python
      • 2.1.15.Support Vector Machines
      • 2.1.16.K means clustering
      • 2.1.17.Principal Component Analysis
    • 2.2. Machine Learning Crash Course Jam
Powered by GitBook
On this page

Was this helpful?

  1. Chapter 1.Notes from research
  2. 7. module
  3. 7.2.Common module

7.2.2.threading

Previous7.2.1.schedNext8. Integrate IIS with django

Last updated 5 years ago

Was this helpful?

  • 1.Introduction

    • This module constructs higher-level threading interfaces on top of the lower level module. See also the mutex and Queue modules.

  • 2.Usage

    • 創建Thread的方式有兩種:

      • 1.創建一個類別並覆寫Threading.Thread:

        • 在此類別中的init()中傳入參數, 此參數通常是要讓thread執行的function, 呼叫super.init()

        • 覆寫run(), 通常在這裡執行傳入的function

      • 2.直接呼叫Threading.Thread

    • 比較好的架構如下:

      • -ThreadRunner-

        • 最上層的包裝, Thread的管理者:

          • 私有變數中有一個Thread pool, 可以是list或是dictionary

          • 提供addThreadWorker(), 以添加Thread(Worker)到Thread pool

          • 提供run(), 以啟動Thread pool中所有的Thread(Worker)

        class TheradRunner():
          def __init__(self):
              self.__threadPool = {}
        
          def addThreadWorker(self, worker, name):
              self.__threadPool.update({name:Thread(worker)})
        
          def run(self):
              for name, thread in self.__threadPool.items():
                  thread.start()
              for name, thread in self.__threadPool.items():
                  thread.join()
      • -Thread-

        • 繼承threading.Thread

          • 在init()中傳入Worker, 在這裡可以用檢查woker的run()是否是, 並用hasattr檢查worker的run是否存在

          • 在init()中呼叫super.init()

          • 覆寫run(), 通常在這裡執行傳入的function

        class Thread(threading.Thread):
          def __init__(self, workerClass):
              super().__init__()
              self.status = Status.Init
              if hasattr(workerClass, 'run') and callable(workerClass.run):
                  self.__workerClass = workerClass
                  self.exceptionMessage = None
              else:
                  self.status = Status.Error
                  self.exceptionMessage = 'Worker function error'
        
          def start(self):
              if Status.Init == self.status:
                   self.status = Status.Running
                   super().start()
        
         def run(self):
              try:
                  self.__workerClass.run()
                  self.status = Status.Success
              except Exception:
                  self.exceptionMessage = traceback.format_exc()
                  self.status = Status.Error
      • -Worker-

        • 提供run(), 真正要讓Thread作的事

        • 若有很多不同的事情分別要讓不同的thread執行, 則可以分別撰寫不同類別, 這些類別都需要繼承Worker

        class Worker():
          def run(self):
              pass
        class ReadLineWorker(Worker):
          def __init__(self, aHoldingZoneMap):
              self.__holdingZoneTableMap = aHoldingZoneMap
        
          def run(self):
              self.readLinesAndAttribute()
      • -製作新的thread-

        lineWorker = ReadLineWorker(holdingZoneTableMap)
        threadRunner.addThreadWorker(lineWorker, 'ReadLineWorker')
        threadRunner.run()
  • 3.Reference

thread
hasattr
callable
https://docs.python.org/2/library/threading.html
http://sebastiandahlgren.se/2014/06/27/running-a-method-as-a-background-thread-in-python/
https://puremonkey2010.blogspot.tw/2012/07/python-python-threading.html