import psycopg2
import threading
import time

DSN = "dbname=postgres host=localhost"

def init():
  conn = psycopg2.connect(DSN)
  cursor = conn.cursor()
  cursor.execute("""DROP TABLE IF EXISTS foo""")
  cursor.execute("""CREATE TABLE foo (i serial primary key)""")
  conn.commit()

def big_slow():
  conn = psycopg2.connect(DSN)
  cursor = conn.cursor()
  # hold onto many AELs
  for i in range(6000):
    cursor.execute("create temp table foo%s (i int) on commit drop" % (i,))
  time.sleep(600)
  conn.rollback()

def many_small_xacts(thread_id):
  conn = psycopg2.connect(DSN)
  cursor = conn.cursor()
  for loops in range(100000):
    #cursor.execute("create temp table foo1 (i int) on commit drop");
    cursor.execute("begin")
    cursor.execute("insert into foo values (default)")
    cursor.execute("prepare transaction %s", [thread_id])
    cursor.execute("commit prepared %s", [thread_id])

init()
threading.Thread(target=big_slow).start()                              
for i in range(48):
  threading.Thread(target=many_small_xacts, args=['t' + str(i)]).start()                              

