1#!/usr/bin/env python 2"""A test to verify Psycopg collaboration with other blocking I/O. 3 4Please run the script ``tools/wait_server.py`` in a separate shell to make the 5test work. 6 7If the test works you should see download tasks overlapping query tasks. 8""" 9 10# Copyright (C) 2010-2012 Daniele Varrazzo <daniele.varrazzo@gmail.com> 11# All rights reserved. See COPYING file for details. 12 13 14import eventlet 15eventlet.monkey_patch() 16 17import psycogreen.eventlet 18psycogreen.eventlet.patch_psycopg() 19 20import urllib2 # green 21 22import psycopg2 23 24import logging 25logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s") 26logger = logging.getLogger() 27logger.info("testing psycopg2 with eventlet") 28 29conn = psycopg2.connect("dbname=postgres") 30 31def download(num, secs): 32 url = "http://localhost:8000/%d/" % secs 33 for i in range(num): 34 logger.info("download %d start", i) 35 data = urllib2.urlopen(url).read() 36 logger.info("download %d end", i) 37 38def fetch(num, secs): 39 cur = conn.cursor() 40 for i in range(num): 41 logger.info("query %d start", i) 42 cur.execute("select pg_sleep(%s)", (secs,)) 43 logger.info("query %d end", i) 44 45logger.info("making jobs") 46pool = eventlet.GreenPool() 47pool.spawn(download, 2, 3), 48pool.spawn(fetch, 3, 2), 49 50logger.info("join begin") 51pool.waitall() 52logger.info("join end") 53 54