title: How should i reduce the execution time using Threading in python?
body: <p>when i used the following code using single thread time is 49.7 secs but as i increase the number of threads as below </p>
  
  <pre><code>work1=TestThread(self,"worker1") 
  work2=TestThread(self,"worker2") 
  </code></pre>
  
  <p>the execution time is also increasing.</p>
  
  <pre><code>import time
  import wx
  import threading
  from threading import Thread
  
  # Define notification event for thread completion
  EVT_RESULT_ID = wx.NewId()
  
  def EVT_RESULT(win, func):
      """Define Result Event."""
      win.Connect(-1, -1, EVT_RESULT_ID, func)
  
  class ResultEvent(wx.PyEvent):
      """Simple event to carry arbitrary result data."""
      def __init__(self, data):
          """Init Result Event."""
          wx.PyEvent.__init__(self)
          self.SetEventType(EVT_RESULT_ID)
          self.data = data
  
  ########################################################################
  class TestThread(Thread):
      """Test Worker Thread Class."""
  
      #----------------------------------------------------------------------
      def __init__(self, wxObject,name):
          """Init Worker Thread Class."""
          Thread.__init__(self)
          self.name = name
          self.wxObject = wxObject
          self.start()    # start the thread
  
      #----------------------------------------------------------------------
      def run(self):
          """Run Worker Thread."""
          # This is the code executing in the new thread.
          start_time=time.time()
          print " Entering " + self.name + "\n"
          for i in range(1000):
              for a in range(1000):
                  for b in range(1000):
                      pass
          print " execution time of "+ self.name +" is: " + str(time.time()-start_time) + "\n"
          aot=1
          wx.PostEvent(self.wxObject, ResultEvent(aot))
  
  ########################################################################
  class MyForm(wx.Frame):
  
      #----------------------------------------------------------------------
      def __init__(self):
          wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")
  
          # Add a panel so it looks the correct on all platforms
          panel = wx.Panel(self, wx.ID_ANY)
          self.displayLbl = wx.StaticText(panel, label="Amount of time since thread started goes here")
          self.btn = btn = wx.Button(panel, label="Start Thread")
  
          btn.Bind(wx.EVT_BUTTON, self.onButton)
  
          sizer = wx.BoxSizer(wx.VERTICAL)
          sizer.Add(self.displayLbl, 0, wx.ALL|wx.CENTER, 5)
          sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
          panel.SetSizer(sizer)
  
          # Set up event handler for any worker thread results
          EVT_RESULT(self, self.updateDisplay)
  
      #----------------------------------------------------------------------
      def onButton(self, event):
          """
          Runs the thread
          """
          self.displayLbl.SetLabel("Thread started!")
          work1=TestThread(self,"worker1")
          print threading.enumerate()
          print threading.activeCount()
          btn = event.GetEventObject()
          btn.Disable()
  
      #----------------------------------------------------------------------
      def updateDisplay(self, msg):
          """
          Receives data from thread and updates the display
          """
          t = msg.data
          if (t==1):
              self.btn.Enable()
  
  #----------------------------------------------------------------------
  # Run the program
  if __name__ == "__main__":
      app = wx.App()
      frame = MyForm().Show()
      app.MainLoop()
  </code></pre>
  
  <p>The output for single thread is:</p>
  
  <pre><code>Entering worker1
  [&lt;_MainThread(MainThread, started 9360)&gt;, &lt;Thread(SockThread, started daemon 4984)&gt;, &lt;TestThread(worker1, started 5776)&gt;]
  
  3
   execution time of worker1 is: 49.2760000229
  </code></pre>
  
  <p>for two thread's is:</p>
  
  <pre><code>Entering worker1
   Entering worker2
  [&lt;_MainThread(MainThread, started 8880)&gt;, &lt;Thread(SockThread, started daemon 8280)&gt;, &lt;TestThread(worker1, started 5788)&gt;, &lt;TestThread(worker2, started 12240)&gt;]
  
  
  4
   execution time of worker2 is: 113.527999878
  
   execution time of worker1 is: 114.292000055
  </code></pre>
  
  <p>Why is it happening like that. Can anyone explain? Also what is that SockThread? TIA </p>