title: Python code is running too slow, do I need to find a way to allocate more memory to python process?
body: <p>I am using 64-bit 3.6.3 python on a 64-bit windows 10 laptop, with 12 gigs of RAM.</p>
  
  <p>I have python code that can extract a zip file (tar.gz). If I use the code, it takes a really long time (~1.5 hour) but if I unzip it directly using 7zip it takes less than 5 minutes, so I am guessing there is something impeding the processing power of python. </p>
  
  <p>I am trying to run this code <a href="https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/1_notmnist.ipynb" rel="nofollow noreferrer">https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/1_notmnist.ipynb</a></p>
  
  <p>for convenience, here are the specific commands for unzipping. </p>
  
  <pre><code>import tarfile
  
  tar = tarfile.open(filename)
  sys.stdout.flush()
  tar.extractall(data_root)
  tar.close()
  </code></pre>
  
  <p>Here is full code. </p>
  
  <pre><code>from __future__ import print_function
  import os
  import sys
  import tarfile
  from six.moves.urllib.request import urlretrieve
  
  
  # Config the matplotlib backend as plotting inline in IPython
  
  url = 'https://commondatastorage.googleapis.com/books1000/'
  last_percent_reported = None
  data_root = '.'  # Change me to store data elsewhere
  
  
  def download_progress_hook(count, blockSize, totalSize):
      """A hook to report the progress of a download. This is mostly intended for users with
      slow internet connections. Reports every 5% change in download progress.
      """
      global last_percent_reported
      percent = int(count * blockSize * 100 / totalSize)
  
      if last_percent_reported != percent:
          if percent % 5 == 0:
              sys.stdout.write("%s%%" % percent)
              sys.stdout.flush()
          else:
              sys.stdout.write(".")
              sys.stdout.flush()
  
          last_percent_reported = percent
  
  
  def maybe_download(filename, expected_bytes, force=False):
      """Download a file if not present, and make sure it's the right size."""
      dest_filename = os.path.join(data_root, filename)
      if force or not os.path.exists(dest_filename):
          print('Attempting to download:', filename)
          filename, _ = urlretrieve(url + filename, dest_filename, reporthook=download_progress_hook)
          print('\nDownload Complete!')
      statinfo = os.stat(dest_filename)
      if statinfo.st_size == expected_bytes:
          print('Found and verified', dest_filename)
      else:
          raise Exception(
              'Failed to verify ' + dest_filename + '. Can you get to it with a browser?')
      return dest_filename
  
  
  train_filename = maybe_download('notMNIST_large.tar.gz', 247336696)
  test_filename = maybe_download('notMNIST_small.tar.gz', 8458043)
  
  num_classes = 10
  
  def maybe_extract(filename, force=False):
    root = os.path.splitext(os.path.splitext(filename)[0])[0]  # remove .tar.gz
    if os.path.isdir(root) and not force:
      # You may override by setting force=True.
      print('%s already present - Skipping extraction of %s.' % (root, filename))
    else:
      print('Extracting data for %s. This may take a while. Please wait.' % root)
      tar = tarfile.open(filename)
      sys.stdout.flush()
      tar.extractall(data_root)
      tar.close()
    data_folders = [
      os.path.join(root, d) for d in sorted(os.listdir(root))
      if os.path.isdir(os.path.join(root, d))]
    if len(data_folders) != num_classes:
      raise Exception(
        'Expected %d folders, one per class. Found %d instead.' % (
          num_classes, len(data_folders)))
    print(data_folders)
    return data_folders
  
  train_folders = maybe_extract(train_filename)
  test_folders = maybe_extract(test_filename)
  </code></pre>
  
  <p>I am using 64-bit 3.6.3 python on a 64-bit windows 10 laptop, with 12 gigs of RAM. </p>