title: Python Postgres psycopg2 ThreadedConnectionPool exhausted
body: <p>I have looked into several 'too many clients' related topic here but still can't solve my problem, so I have to ask this again, for me specific case.</p>
  
  <p>Basically, I set up my local Postgres server and need to do tens of thousands of queries, so I used the Python psycopg2package. Here are my codes:</p>
  
  <pre><code>import psycopg2
  import pandas as pd
  import numpy as np
  from flashtext import KeywordProcessor
  from psycopg2.pool import ThreadedConnectionPool
  from concurrent.futures import ThreadPoolExecutor
  
  df = pd.DataFrame({'S':['California', 'Ohio', 'Texas'], 'T':['Dispatcher', 'Zookeeper', 'Mechanics']})
  # df = pd.concat([df]*10000) # repeat df 10000 times
  
  DSN = "postgresql://User:password@localhost/db"
  tcp = ThreadedConnectionPool(1, 800, DSN)
  
  def do_one_query(inputS, inputT):
      conn = tcp.getconn()
      c = conn.cursor()
  
      q = r"SELECT * from eridata where "State" = 'California' and "Title" = 'Dispatcher' limit 1;"   
  
      c.execute(q)
      all_results = c.fetchall()
      for row in all_results:
          return row
      tcp.putconn(conn, close=True)
  
  cnt=0
  for idx, row in df.iterrows():
  
      cnt+=1
      with ThreadPoolExecutor(max_workers=1) as pool:
          ret = pool.submit(do_one_query,  row["S"], row["T"])
          print ret.result()
      print cnt
  </code></pre>
  
  <p>The code runs well with a small df. If I repeat df by 10000 times, I got error message saying connection pool exhausted
  . I though the connections I used have been closed by this line:</p>
  
  <p>tcp.putconn(conn, close=True)
  But I guess actually they are not closed? How can I get around this issue?</p>