python3 compat fixes

https://github.com/eventlet/eventlet/pull/59
This commit is contained in:
Victor Sergeyev
2013-11-25 18:21:40 +02:00
committed by Sergey Shepelev
parent cfdd9a922c
commit 2b2f0a96b4
35 changed files with 327 additions and 279 deletions

View File

@@ -35,6 +35,8 @@ Contributors
* Floris Bruynooghe * Floris Bruynooghe
* Paul Oppenheim * Paul Oppenheim
* Jakub Stasiak * Jakub Stasiak
* Aldona Majorek
* Victor Sergeyev
Linden Lab Contributors Linden Lab Contributors
----------------------- -----------------------

View File

@@ -9,7 +9,7 @@ def measure_best(repeat, iters,
funcs = list(funcs) funcs = list(funcs)
results = dict([(f,[]) for f in funcs]) results = dict([(f,[]) for f in funcs])
for i in xrange(repeat): for i in six.moves.range(repeat):
random.shuffle(funcs) random.shuffle(funcs)
for func in funcs: for func in funcs:
gc.collect() gc.collect()

View File

@@ -7,7 +7,10 @@ import sys
import eventlet import eventlet
import random import random
import time import time
from eventlet.hubs import timer, get_hub from eventlet.hubs import timer, get_hub
from eventlet.support import six
timer_count = 100000 timer_count = 100000
@@ -19,7 +22,7 @@ l = []
def work(n): def work(n):
l.append(n) l.append(n)
timeouts = [random.uniform(0, 10) for x in xrange(timer_count)] timeouts = [random.uniform(0, 10) for x in six.moves.range(timer_count)]
hub = get_hub() hub = get_hub()

View File

@@ -4,6 +4,7 @@ from __future__ import print_function
import time import time
import benchmarks import benchmarks
from eventlet.support import six
BYTES=1000 BYTES=1000
@@ -30,13 +31,13 @@ def writer(addr, socket_impl):
def green_accepter(server_sock, pool): def green_accepter(server_sock, pool):
for i in xrange(CONCURRENCY): for i in six.moves.range(CONCURRENCY):
sock, addr = server_sock.accept() sock, addr = server_sock.accept()
pool.spawn_n(reader, sock) pool.spawn_n(reader, sock)
def heavy_accepter(server_sock, pool): def heavy_accepter(server_sock, pool):
for i in xrange(CONCURRENCY): for i in six.moves.range(CONCURRENCY):
sock, addr = server_sock.accept() sock, addr = server_sock.accept()
t = threading.Thread(None, reader, "reader thread", (sock,)) t = threading.Thread(None, reader, "reader thread", (sock,))
t.start() t.start()
@@ -57,7 +58,7 @@ def launch_green_threads():
server_sock.listen(50) server_sock.listen(50)
addr = ('localhost', server_sock.getsockname()[1]) addr = ('localhost', server_sock.getsockname()[1])
pool.spawn_n(green_accepter, server_sock, pool) pool.spawn_n(green_accepter, server_sock, pool)
for i in xrange(CONCURRENCY): for i in six.moves.range(CONCURRENCY):
pool.spawn_n(writer, addr, eventlet.green.socket.socket) pool.spawn_n(writer, addr, eventlet.green.socket.socket)
pool.waitall() pool.waitall()
@@ -75,7 +76,7 @@ def launch_heavy_threads():
accepter_thread = threading.Thread(None, heavy_accepter, "accepter thread", (server_sock, threads)) accepter_thread = threading.Thread(None, heavy_accepter, "accepter thread", (server_sock, threads))
accepter_thread.start() accepter_thread.start()
threads.append(accepter_thread) threads.append(accepter_thread)
for i in xrange(CONCURRENCY): for i in six.moves.range(CONCURRENCY):
client_thread = threading.Thread(None, writer, "writer thread", (addr, socket.socket)) client_thread = threading.Thread(None, writer, "writer thread", (addr, socket.socket))
client_thread.start() client_thread.start()
threads.append(client_thread) threads.append(client_thread)

View File

@@ -54,7 +54,7 @@
timeout = Timeout(1) timeout = Timeout(1)
try: try:
... ...
except Timeout, t: except Timeout as t:
if t is not timeout: if t is not timeout:
raise # not my timeout raise # not my timeout

View File

@@ -95,12 +95,13 @@ def backdoor_server(sock, locals=None):
sock.close() sock.close()
def backdoor((conn, addr), locals=None): def backdoor(conn_info, locals=None):
"""Sets up an interactive console on a socket with a single connected """Sets up an interactive console on a socket with a single connected
client. This does not block the caller, as it spawns a new greenlet to client. This does not block the caller, as it spawns a new greenlet to
handle the console. This is meant to be called from within an accept loop handle the console. This is meant to be called from within an accept loop
(such as backdoor_server). (such as backdoor_server).
""" """
conn, addr = conn_info
host, port = addr host, port = addr
print("backdoor to %s:%s" % (host, port)) print("backdoor to %s:%s" % (host, port))
fl = conn.makefile("rw") fl = conn.makefile("rw")

View File

@@ -2,9 +2,12 @@ __select = __import__('select')
error = __select.error error = __select.error
from eventlet.greenthread import getcurrent from eventlet.greenthread import getcurrent
from eventlet.hubs import get_hub from eventlet.hubs import get_hub
from eventlet.support import six
__patched__ = ['select'] __patched__ = ['select']
def get_fileno(obj): def get_fileno(obj):
# The purpose of this function is to exactly replicate # The purpose of this function is to exactly replicate
# the behavior of the select module when confronted with # the behavior of the select module when confronted with
@@ -13,15 +16,16 @@ def get_fileno(obj):
try: try:
f = obj.fileno f = obj.fileno
except AttributeError: except AttributeError:
if not isinstance(obj, (int, long)): if not isinstance(obj, six.integer_types):
raise TypeError("Expected int or long, got " + type(obj)) raise TypeError("Expected int or long, got " + type(obj))
return obj return obj
else: else:
rv = f() rv = f()
if not isinstance(rv, (int, long)): if not isinstance(rv, six.integer_types):
raise TypeError("Expected int or long, got " + type(rv)) raise TypeError("Expected int or long, got " + type(rv))
return rv return rv
def select(read_list, write_list, error_list, timeout=None): def select(read_list, write_list, error_list, timeout=None):
# error checking like this is required by the stdlib unit tests # error checking like this is required by the stdlib unit tests
if timeout is not None: if timeout is not None:

View File

@@ -1,4 +1,4 @@
from eventlet.support import get_errno from eventlet.support import get_errno, six
from eventlet.hubs import trampoline from eventlet.hubs import trampoline
BUFFER_SIZE = 4096 BUFFER_SIZE = 4096
@@ -18,13 +18,11 @@ CONNECT_SUCCESS = set((0, errno.EISCONN))
if sys.platform[:3] == "win": if sys.platform[:3] == "win":
CONNECT_ERR.add(errno.WSAEINVAL) # Bug 67 CONNECT_ERR.add(errno.WSAEINVAL) # Bug 67
# Emulate _fileobject class in 3.x implementation if six.PY3:
# Eventually this internal socket structure could be replaced with makefile calls. from io import IOBase as file
try: _fileobject = socket.SocketIO
elif six.PY2:
_fileobject = socket._fileobject _fileobject = socket._fileobject
except AttributeError:
def _fileobject(sock, *args, **kwargs):
return _original_socket.makefile(sock, *args, **kwargs)
def socket_connect(descriptor, address): def socket_connect(descriptor, address):
@@ -123,7 +121,7 @@ class GreenSocket(object):
""" """
def __init__(self, family_or_realsock=socket.AF_INET, *args, **kwargs): def __init__(self, family_or_realsock=socket.AF_INET, *args, **kwargs):
should_set_nonblocking = kwargs.pop('set_nonblocking', True) should_set_nonblocking = kwargs.pop('set_nonblocking', True)
if isinstance(family_or_realsock, (int, long)): if isinstance(family_or_realsock, six.integer_types):
fd = _original_socket(family_or_realsock, *args, **kwargs) fd = _original_socket(family_or_realsock, *args, **kwargs)
else: else:
fd = family_or_realsock fd = family_or_realsock
@@ -427,10 +425,10 @@ class GreenPipe(_fileobject):
- file argument can be descriptor, file name or file object. - file argument can be descriptor, file name or file object.
""" """
def __init__(self, f, mode='r', bufsize=-1): def __init__(self, f, mode='r', bufsize=-1):
if not isinstance(f, (basestring, int, file)): if not isinstance(f, six.string_types + (int, file)):
raise TypeError('f(ile) should be int, str, unicode or file, not %r' % f) raise TypeError('f(ile) should be int, str, unicode or file, not %r' % f)
if isinstance(f, basestring): if isinstance(f, six.string_types):
f = open(f, mode, 0) f = open(f, mode, 0)
if isinstance(f, int): if isinstance(f, int):
@@ -467,12 +465,11 @@ class GreenPipe(_fileobject):
'write', 'xreadlines', '__iter__', 'writelines']: 'write', 'xreadlines', '__iter__', 'writelines']:
setattr(self, method, _operationOnClosedFile) setattr(self, method, _operationOnClosedFile)
if getattr(file, '__enter__', None): def __enter__(self):
def __enter__(self): return self
return self
def __exit__(self, *args): def __exit__(self, *args):
self.close() self.close()
def readinto(self, buf): def readinto(self, buf):
data = self.read(len(buf)) # FIXME could it be done without allocating intermediate? data = self.read(len(buf)) # FIXME could it be done without allocating intermediate?

View File

@@ -5,7 +5,7 @@ from eventlet import event
from eventlet import hubs from eventlet import hubs
from eventlet import timeout from eventlet import timeout
from eventlet.hubs import timer from eventlet.hubs import timer
from eventlet.support import greenlets as greenlet from eventlet.support import greenlets as greenlet, six
import warnings import warnings
__all__ = ['getcurrent', 'sleep', 'spawn', 'spawn_n', 'spawn_after', 'spawn_after_local', 'GreenThread'] __all__ = ['getcurrent', 'sleep', 'spawn', 'spawn_n', 'spawn_after', 'spawn_after_local', 'GreenThread']
@@ -253,7 +253,7 @@ def kill(g, *throw_args):
# method never got called # method never got called
def just_raise(*a, **kw): def just_raise(*a, **kw):
if throw_args: if throw_args:
raise throw_args[0], throw_args[1], throw_args[2] six.reraise(throw_args[0], throw_args[1], throw_args[2])
else: else:
raise greenlet.GreenletExit() raise greenlet.GreenletExit()
g.run = just_raise g.run = just_raise

View File

@@ -3,7 +3,7 @@ import traceback
import event import event
import types import types
from eventlet.support import greenlets as greenlet from eventlet.support import greenlets as greenlet, six
from eventlet.hubs.hub import BaseHub, FdListener, READ, WRITE from eventlet.hubs.hub import BaseHub, FdListener, READ, WRITE
@@ -63,7 +63,7 @@ class Hub(BaseHub):
t = getattr(event, '__event_exc') t = getattr(event, '__event_exc')
setattr(event, '__event_exc', None) setattr(event, '__event_exc', None)
assert getattr(event, '__event_exc') is None assert getattr(event, '__event_exc') is None
raise t[0], t[1], t[2] six.reraise(t[0], t[1], t[2])
if result != 0: if result != 0:
return result return result

View File

@@ -1,10 +1,14 @@
import sys import sys
import imp import imp
from eventlet.support import six
__all__ = ['inject', 'import_patched', 'monkey_patch', 'is_monkey_patched'] __all__ = ['inject', 'import_patched', 'monkey_patch', 'is_monkey_patched']
__exclude = set(('__builtins__', '__file__', '__name__')) __exclude = set(('__builtins__', '__file__', '__name__'))
class SysModulesSaver(object): class SysModulesSaver(object):
"""Class that captures some subset of the current state of """Class that captures some subset of the current state of
sys.modules. Pass in an iterator of module names to the sys.modules. Pass in an iterator of module names to the
@@ -24,7 +28,7 @@ class SysModulesSaver(object):
sys.modules. sys.modules.
""" """
try: try:
for modname, mod in self._saved.iteritems(): for modname, mod in six.iteritems(self._saved):
if mod is not None: if mod is not None:
sys.modules[modname] = mod sys.modules[modname] = mod
else: else:
@@ -172,14 +176,17 @@ def original(modname):
# some rudimentary dependency checking -- fortunately the modules # some rudimentary dependency checking -- fortunately the modules
# we're working on don't have many dependencies so we can just do # we're working on don't have many dependencies so we can just do
# some special-casing here # some special-casing here
deps = {'threading':'thread', 'Queue':'threading'} if six.PY2:
deps = {'threading': 'thread', 'Queue': 'threading'}
if six.PY3:
deps = {'threading': '_thread', 'queue': 'threading'}
if modname in deps: if modname in deps:
dependency = deps[modname] dependency = deps[modname]
saver.save(dependency) saver.save(dependency)
sys.modules[dependency] = original(dependency) sys.modules[dependency] = original(dependency)
try: try:
real_mod = __import__(modname, {}, {}, modname.split('.')[:-1]) real_mod = __import__(modname, {}, {}, modname.split('.')[:-1])
if modname == 'Queue' and not hasattr(real_mod, '_threading'): if modname in ('Queue', 'queue') and not hasattr(real_mod, '_threading'):
# tricky hack: Queue's constructor in <2.7 imports # tricky hack: Queue's constructor in <2.7 imports
# threading on every instantiation; therefore we wrap # threading on every instantiation; therefore we wrap
# it so that it always gets the original threading # it so that it always gets the original threading
@@ -298,7 +305,10 @@ def _green_thread_modules():
from eventlet.green import Queue from eventlet.green import Queue
from eventlet.green import thread from eventlet.green import thread
from eventlet.green import threading from eventlet.green import threading
return [('Queue', Queue), ('thread', thread), ('threading', threading)] if six.PY2:
return [('Queue', Queue), ('thread', thread), ('threading', threading)]
if six.PY3:
return [('queue', Queue), ('_thread', thread), ('threading', threading)]
def _green_time_modules(): def _green_time_modules():
from eventlet.green import time from eventlet.green import time

View File

@@ -190,7 +190,7 @@ class Pool(object):
>>> from eventlet import coros >>> from eventlet import coros
>>> import string >>> import string
>>> pool = coros.CoroutinePool(max_size=5) >>> pool = coros.CoroutinePool(max_size=5)
>>> pausers = [coros.Event() for x in xrange(2)] >>> pausers = [coros.Event() for x in range(2)]
>>> def longtask(evt, desc): >>> def longtask(evt, desc):
... print("%s woke up with %s" % (desc, evt.wait())) ... print("%s woke up with %s" % (desc, evt.wait()))
... ...
@@ -229,14 +229,14 @@ class Pool(object):
returning h returning h
returning i returning i
g g
>>> print("".join([step.next() for x in xrange(3)])) >>> print("".join([step.next() for x in range(3)]))
returning j returning j
returning k returning k
returning l returning l
returning m returning m
hij hij
>>> pausers[1].send("B") >>> pausers[1].send("B")
>>> print("".join([step.next() for x in xrange(4)])) >>> print("".join([step.next() for x in range(4)]))
B woke up with B B woke up with B
returning n returning n
returning o returning o

View File

@@ -71,7 +71,7 @@ class Pool(object):
if create is not None: if create is not None:
self.create = create self.create = create
for x in xrange(min_size): for x in range(min_size):
self.current_size += 1 self.current_size += 1
self.free_items.append(self.create()) self.free_items.append(self.create())

View File

@@ -630,7 +630,7 @@ class wrap_errors(object):
def func1(*args, **kwargs): def func1(*args, **kwargs):
try: try:
return func(*args, **kwargs) return func(*args, **kwargs)
except (A, B, C), ex: except (A, B, C) as ex:
return ex return ex
wrap_errors provides a shortcut to write that in one line: wrap_errors provides a shortcut to write that in one line:

View File

@@ -45,17 +45,21 @@ import sys
import heapq import heapq
import collections import collections
import traceback import traceback
from Queue import Full, Empty
_NONE = object()
from eventlet.hubs import get_hub
from eventlet.greenthread import getcurrent
from eventlet.event import Event from eventlet.event import Event
from eventlet.greenthread import getcurrent
from eventlet.hubs import get_hub
from eventlet.support import six
from eventlet.timeout import Timeout from eventlet.timeout import Timeout
__all__ = ['Queue', 'PriorityQueue', 'LifoQueue', 'LightQueue', 'Full', 'Empty'] __all__ = ['Queue', 'PriorityQueue', 'LifoQueue', 'LightQueue', 'Full', 'Empty']
_NONE = object()
Full = six.moves.queue.Full
Empty = six.moves.queue.Empty
class Waiter(object): class Waiter(object):
"""A low level synchronization class. """A low level synchronization class.
@@ -451,5 +455,3 @@ class LifoQueue(Queue):
def _get(self): def _get(self):
return self.queue.pop() return self.queue.pop()

View File

@@ -28,7 +28,7 @@ __all__ = ['Timeout',
_NONE = object() _NONE = object()
# deriving from BaseException so that "except Exception, e" doesn't catch # deriving from BaseException so that "except Exception as e" doesn't catch
# Timeout exceptions. # Timeout exceptions.
class Timeout(BaseException): class Timeout(BaseException):
"""Raises *exception* in the current greenthread after *timeout* seconds. """Raises *exception* in the current greenthread after *timeout* seconds.

View File

@@ -17,13 +17,16 @@ import imp
import os import os
import sys import sys
from eventlet import event from eventlet import event, greenio, greenthread, patcher, timeout
from eventlet import greenio from eventlet.support import six
from eventlet import greenthread
from eventlet import patcher
from eventlet import timeout
threading = patcher.original('threading') threading = patcher.original('threading')
Queue_module = patcher.original('Queue') if six.PY2:
Queue_module = patcher.original('Queue')
if six.PY3:
Queue_module = patcher.original('queue')
Queue = Queue_module.Queue Queue = Queue_module.Queue
Empty = Queue_module.Empty Empty = Queue_module.Empty
@@ -117,7 +120,7 @@ def execute(meth,*args, **kwargs):
if not QUIET: if not QUIET:
traceback.print_exception(c,e,tb) traceback.print_exception(c,e,tb)
traceback.print_stack() traceback.print_stack()
raise c,e,tb six.reraise(c, e, tb)
return rv return rv
@@ -263,7 +266,7 @@ def setup():
warnings.warn("Zero threads in tpool. All tpool.execute calls will\ warnings.warn("Zero threads in tpool. All tpool.execute calls will\
execute in main thread. Check the value of the environment \ execute in main thread. Check the value of the environment \
variable EVENTLET_THREADPOOL_SIZE.", RuntimeWarning) variable EVENTLET_THREADPOOL_SIZE.", RuntimeWarning)
for i in xrange(_nthreads): for i in six.moves.range(_nthreads):
t = threading.Thread(target=tworker, t = threading.Thread(target=tworker,
name="tpool_thread_%s" % i) name="tpool_thread_%s" % i)
t.setDaemon(True) t.setDaemon(True)

View File

@@ -113,7 +113,7 @@ class WebSocketWSGI(object):
ws = self._handle_legacy_request(environ) ws = self._handle_legacy_request(environ)
else: else:
raise BadRequest() raise BadRequest()
except BadRequest, e: except BadRequest as e:
status = e.status status = e.status
body = e.body or '' body = e.body or ''
headers = e.headers or [] headers = e.headers or []
@@ -123,7 +123,7 @@ class WebSocketWSGI(object):
try: try:
self.handler(ws) self.handler(ws)
except socket.error, e: except socket.error as e:
if get_errno(e) not in ACCEPTABLE_CLIENT_ERRORS: if get_errno(e) not in ACCEPTABLE_CLIENT_ERRORS:
raise raise
# Make sure we send the closing frame # Make sure we send the closing frame

View File

@@ -11,7 +11,8 @@ from eventlet.green import socket
from eventlet.green import BaseHTTPServer from eventlet.green import BaseHTTPServer
from eventlet import greenpool from eventlet import greenpool
from eventlet import greenio from eventlet import greenio
from eventlet.support import get_errno from eventlet.support import get_errno, six
DEFAULT_MAX_SIMULTANEOUS_REQUESTS = 1024 DEFAULT_MAX_SIMULTANEOUS_REQUESTS = 1024
DEFAULT_MAX_HTTP_VERSION = 'HTTP/1.1' DEFAULT_MAX_HTTP_VERSION = 'HTTP/1.1'
@@ -372,7 +373,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
try: try:
if headers_sent: if headers_sent:
# Re-raise original exception if headers sent # Re-raise original exception if headers sent
raise exc_info[0], exc_info[1], exc_info[2] six.reraise(exc_info[0], exc_info[1], exc_info[2])
finally: finally:
# Avoid dangling circular ref # Avoid dangling circular ref
exc_info = None exc_info = None
@@ -583,10 +584,11 @@ class Server(BaseHTTPServer.HTTPServer):
d.update(self.environ) d.update(self.environ)
return d return d
def process_request(self, (sock, address)): def process_request(self, sock_params):
# The actual request handling takes place in __init__, so we need to # The actual request handling takes place in __init__, so we need to
# set minimum_chunk_size before __init__ executes and we don't want to modify # set minimum_chunk_size before __init__ executes and we don't want to modify
# class variable # class variable
sock, address = sock_params
proto = types.InstanceType(self.protocol) proto = types.InstanceType(self.protocol)
if self.minimum_chunk_size is not None: if self.minimum_chunk_size is not None:
proto.minimum_chunk_size = self.minimum_chunk_size proto.minimum_chunk_size = self.minimum_chunk_size

View File

@@ -1,11 +1,13 @@
import eventlet import eventlet
from eventlet import wsgi from eventlet import wsgi
from eventlet import websocket from eventlet import websocket
from eventlet.support import six
# demo app # demo app
import os import os
import random import random
@websocket.WebSocketWSGI @websocket.WebSocketWSGI
def handle(ws): def handle(ws):
""" This is the websocket handler function. Note that we """ This is the websocket handler function. Note that we
@@ -18,7 +20,7 @@ def handle(ws):
ws.send(m) ws.send(m)
elif ws.path == '/data': elif ws.path == '/data':
for i in xrange(10000): for i in six.moves.range(10000):
ws.send("0 %s %s\n" % (i, random.random())) ws.send("0 %s %s\n" % (i, random.random()))
eventlet.sleep(0.1) eventlet.sleep(0.1)

View File

@@ -3,11 +3,14 @@ import os
import eventlet import eventlet
from eventlet import event from eventlet import event
from eventlet.green import socket from eventlet.green import socket
from eventlet.support import six
from tests import LimitedTestCase, s2b, skip_if_no_ssl from tests import LimitedTestCase, s2b, skip_if_no_ssl
certificate_file = os.path.join(os.path.dirname(__file__), 'test_server.crt') certificate_file = os.path.join(os.path.dirname(__file__), 'test_server.crt')
private_key_file = os.path.join(os.path.dirname(__file__), 'test_server.key') private_key_file = os.path.join(os.path.dirname(__file__), 'test_server.key')
class TestServe(LimitedTestCase): class TestServe(LimitedTestCase):
def setUp(self): def setUp(self):
super(TestServe, self).setUp() super(TestServe, self).setUp()
@@ -65,7 +68,7 @@ class TestServe(LimitedTestCase):
hits[0]+=1 hits[0]+=1
l = eventlet.listen(('localhost', 0)) l = eventlet.listen(('localhost', 0))
gt = eventlet.spawn(eventlet.serve, l, counter) gt = eventlet.spawn(eventlet.serve, l, counter)
for i in xrange(100): for i in six.moves.range(100):
client = eventlet.connect(('localhost', l.getsockname()[1])) client = eventlet.connect(('localhost', l.getsockname()[1]))
self.assertFalse(client.recv(100)) self.assertFalse(client.recv(100))
gt.kill() gt.kill()
@@ -100,7 +103,7 @@ class TestServe(LimitedTestCase):
# verify the client is connected by getting data # verify the client is connected by getting data
self.assertEquals(s2b('hi'), c.recv(2)) self.assertEquals(s2b('hi'), c.recv(2))
return c return c
clients = [test_client() for i in xrange(5)] clients = [test_client() for i in range(5)]
# very next client should not get anything # very next client should not get anything
x = eventlet.with_timeout(0.01, x = eventlet.with_timeout(0.01,
test_client, test_client,

View File

@@ -10,6 +10,7 @@ from unittest import TestCase, main
from tests import skipped, skip_unless, skip_with_pyevent, get_database_auth from tests import skipped, skip_unless, skip_with_pyevent, get_database_auth
from eventlet import event from eventlet import event
from eventlet import db_pool from eventlet import db_pool
from eventlet.support import six
import eventlet import eventlet
@@ -133,7 +134,7 @@ class DBConnectionPool(DBTester):
def fill_up_table(self, conn): def fill_up_table(self, conn):
curs = conn.cursor() curs = conn.cursor()
for i in range(1000): for i in six.moves.range(1000):
curs.execute('insert into test_table (value_int) values (%s)' % i) curs.execute('insert into test_table (value_int) values (%s)' % i)
conn.commit() conn.commit()
@@ -419,12 +420,12 @@ class DBConnectionPool(DBTester):
c = self.connection.cursor() c = self.connection.cursor()
self.connection.commit() self.connection.commit()
def bench(c): def bench(c):
for i in xrange(iterations): for i in six.moves.range(iterations):
c.execute('select 1') c.execute('select 1')
bench(c) # warm-up bench(c) # warm-up
results = [] results = []
for i in xrange(3): for i in range(3):
start = time.time() start = time.time()
bench(c) bench(c)
end = time.time() end = time.time()

View File

@@ -35,7 +35,7 @@ def count():
expected = %s expected = %s
normal = %s normal = %s
p = eventlet.GreenPool() p = eventlet.GreenPool()
for i in xrange(expected*2): for i in range(expected*2):
p.spawn(tpool.execute, count) p.spawn(tpool.execute, count)
p.waitall() p.waitall()
assert highwater[0] > 20, "Highwater %%s <= %%s" %% (highwater[0], normal) assert highwater[0] > 20, "Highwater %%s <= %%s" %% (highwater[0], normal)

View File

@@ -626,7 +626,7 @@ class TestGreenPipe(LimitedTestCase):
one_line = "12345\n" one_line = "12345\n"
eventlet.spawn(sender, wf, one_line * 5) eventlet.spawn(sender, wf, one_line * 5)
for i in xrange(5): for i in range(5):
line = rf.readline() line = rf.readline()
eventlet.sleep(0.01) eventlet.sleep(0.01)
self.assertEquals(line, one_line) self.assertEquals(line, one_line)
@@ -668,7 +668,7 @@ class TestGreenPipe(LimitedTestCase):
r = greenio.GreenPipe(r) r = greenio.GreenPipe(r)
w = greenio.GreenPipe(w, 'w') w = greenio.GreenPipe(w, 'w')
large_message = "".join([1024 * chr(i) for i in xrange(65)]) large_message = "".join([1024 * chr(i) for i in range(65)])
def writer(): def writer():
w.write(large_message) w.write(large_message)
@@ -676,7 +676,7 @@ class TestGreenPipe(LimitedTestCase):
gt = eventlet.spawn(writer) gt = eventlet.spawn(writer)
for i in xrange(65): for i in range(65):
buf = r.read(1024) buf = r.read(1024)
expected = 1024 * chr(i) expected = 1024 * chr(i)
self.assertEquals(buf, expected, self.assertEquals(buf, expected,
@@ -790,7 +790,7 @@ class TestGreenIoStarvation(LimitedTestCase):
recvsize = 2 * min_buf_size() recvsize = 2 * min_buf_size()
sendsize = 10000 * recvsize sendsize = 10000 * recvsize
results = [[] for i in xrange(5)] results = [[] for i in range(5)]
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

View File

@@ -6,28 +6,32 @@ import random
import eventlet import eventlet
from eventlet import debug from eventlet import debug
from eventlet import hubs, greenpool, coros, event from eventlet import hubs, greenpool, coros, event
from eventlet.support import greenlets as greenlet from eventlet.support import greenlets as greenlet, six
import tests import tests
def passthru(a): def passthru(a):
eventlet.sleep(0.01) eventlet.sleep(0.01)
return a return a
def passthru2(a, b): def passthru2(a, b):
eventlet.sleep(0.01) eventlet.sleep(0.01)
return a,b return a,b
def raiser(exc): def raiser(exc):
raise exc raise exc
class GreenPool(tests.LimitedTestCase): class GreenPool(tests.LimitedTestCase):
def test_spawn(self): def test_spawn(self):
p = greenpool.GreenPool(4) p = greenpool.GreenPool(4)
waiters = [] waiters = []
for i in xrange(10): for i in range(10):
waiters.append(p.spawn(passthru, i)) waiters.append(p.spawn(passthru, i))
results = [waiter.wait() for waiter in waiters] results = [waiter.wait() for waiter in waiters]
self.assertEquals(results, list(xrange(10))) self.assertEquals(results, list(range(10)))
def test_spawn_n(self): def test_spawn_n(self):
p = greenpool.GreenPool(4) p = greenpool.GreenPool(4)
@@ -35,10 +39,10 @@ class GreenPool(tests.LimitedTestCase):
def do_something(a): def do_something(a):
eventlet.sleep(0.01) eventlet.sleep(0.01)
results_closure.append(a) results_closure.append(a)
for i in xrange(10): for i in range(10):
p.spawn(do_something, i) p.spawn(do_something, i)
p.waitall() p.waitall()
self.assertEquals(results_closure, range(10)) self.assertEquals(results_closure, list(range(10)))
def test_waiting(self): def test_waiting(self):
pool = greenpool.GreenPool(1) pool = greenpool.GreenPool(1)
@@ -123,7 +127,7 @@ class GreenPool(tests.LimitedTestCase):
timer = eventlet.Timeout(1) timer = eventlet.Timeout(1)
try: try:
evt = event.Event() evt = event.Event()
for x in xrange(num_free): for x in six.moves.range(num_free):
pool.spawn(wait_long_time, evt) pool.spawn(wait_long_time, evt)
# if the pool has fewer free than we expect, # if the pool has fewer free than we expect,
# then we'll hit the timeout error # then we'll hit the timeout error
@@ -254,8 +258,8 @@ class GreenPool(tests.LimitedTestCase):
def test_imap(self): def test_imap(self):
p = greenpool.GreenPool(4) p = greenpool.GreenPool(4)
result_list = list(p.imap(passthru, xrange(10))) result_list = list(p.imap(passthru, range(10)))
self.assertEquals(result_list, list(xrange(10))) self.assertEquals(result_list, list(range(10)))
def test_empty_imap(self): def test_empty_imap(self):
p = greenpool.GreenPool(4) p = greenpool.GreenPool(4)
@@ -264,13 +268,13 @@ class GreenPool(tests.LimitedTestCase):
def test_imap_nonefunc(self): def test_imap_nonefunc(self):
p = greenpool.GreenPool(4) p = greenpool.GreenPool(4)
result_list = list(p.imap(None, xrange(10))) result_list = list(p.imap(None, range(10)))
self.assertEquals(result_list, [(x,) for x in xrange(10)]) self.assertEquals(result_list, [(x,) for x in range(10)])
def test_imap_multi_args(self): def test_imap_multi_args(self):
p = greenpool.GreenPool(4) p = greenpool.GreenPool(4)
result_list = list(p.imap(passthru2, xrange(10), xrange(10, 20))) result_list = list(p.imap(passthru2, range(10), range(10, 20)))
self.assertEquals(result_list, list(itertools.izip(xrange(10), xrange(10,20)))) self.assertEquals(result_list, list(itertools.izip(range(10), range(10,20))))
def test_imap_raises(self): def test_imap_raises(self):
# testing the case where the function raises an exception; # testing the case where the function raises an exception;
@@ -282,7 +286,7 @@ class GreenPool(tests.LimitedTestCase):
raise RuntimeError("intentional error") raise RuntimeError("intentional error")
else: else:
return item return item
it = p.imap(raiser, xrange(10)) it = p.imap(raiser, range(10))
results = [] results = []
while True: while True:
try: try:
@@ -295,8 +299,8 @@ class GreenPool(tests.LimitedTestCase):
def test_starmap(self): def test_starmap(self):
p = greenpool.GreenPool(4) p = greenpool.GreenPool(4)
result_list = list(p.starmap(passthru, [(x,) for x in xrange(10)])) result_list = list(p.starmap(passthru, [(x,) for x in range(10)]))
self.assertEquals(result_list, range(10)) self.assertEquals(result_list, list(range(10)))
def test_waitall_on_nothing(self): def test_waitall_on_nothing(self):
p = greenpool.GreenPool() p = greenpool.GreenPool()
@@ -311,36 +315,36 @@ class GreenPool(tests.LimitedTestCase):
class GreenPile(tests.LimitedTestCase): class GreenPile(tests.LimitedTestCase):
def test_pile(self): def test_pile(self):
p = greenpool.GreenPile(4) p = greenpool.GreenPile(4)
for i in xrange(10): for i in range(10):
p.spawn(passthru, i) p.spawn(passthru, i)
result_list = list(p) result_list = list(p)
self.assertEquals(result_list, list(xrange(10))) self.assertEquals(result_list, list(range(10)))
def test_pile_spawn_times_out(self): def test_pile_spawn_times_out(self):
p = greenpool.GreenPile(4) p = greenpool.GreenPile(4)
for i in xrange(4): for i in range(4):
p.spawn(passthru, i) p.spawn(passthru, i)
# now it should be full and this should time out # now it should be full and this should time out
eventlet.Timeout(0) eventlet.Timeout(0)
self.assertRaises(eventlet.Timeout, p.spawn, passthru, "time out") self.assertRaises(eventlet.Timeout, p.spawn, passthru, "time out")
# verify that the spawn breakage didn't interrupt the sequence # verify that the spawn breakage didn't interrupt the sequence
# and terminates properly # and terminates properly
for i in xrange(4,10): for i in range(4,10):
p.spawn(passthru, i) p.spawn(passthru, i)
self.assertEquals(list(p), list(xrange(10))) self.assertEquals(list(p), list(range(10)))
def test_constructing_from_pool(self): def test_constructing_from_pool(self):
pool = greenpool.GreenPool(2) pool = greenpool.GreenPool(2)
pile1 = greenpool.GreenPile(pool) pile1 = greenpool.GreenPile(pool)
pile2 = greenpool.GreenPile(pool) pile2 = greenpool.GreenPile(pool)
def bunch_of_work(pile, unique): def bunch_of_work(pile, unique):
for i in xrange(10): for i in range(10):
pile.spawn(passthru, i + unique) pile.spawn(passthru, i + unique)
eventlet.spawn(bunch_of_work, pile1, 0) eventlet.spawn(bunch_of_work, pile1, 0)
eventlet.spawn(bunch_of_work, pile2, 100) eventlet.spawn(bunch_of_work, pile2, 100)
eventlet.sleep(0) eventlet.sleep(0)
self.assertEquals(list(pile2), list(xrange(100,110))) self.assertEquals(list(pile2), list(range(100,110)))
self.assertEquals(list(pile1), list(xrange(10))) self.assertEquals(list(pile1), list(range(10)))
class StressException(Exception): class StressException(Exception):
@@ -368,7 +372,7 @@ class Stress(tests.LimitedTestCase):
# checks that piles are strictly ordered # checks that piles are strictly ordered
p = greenpool.GreenPile(concurrency) p = greenpool.GreenPile(concurrency)
def makework(count, unique): def makework(count, unique):
for i in xrange(count): for i in six.moves.range(count):
token = (unique, i) token = (unique, i)
p.spawn(pressure, token) p.spawn(pressure, token)
@@ -409,7 +413,7 @@ class Stress(tests.LimitedTestCase):
# ordered and consumes a constant amount of memory # ordered and consumes a constant amount of memory
p = greenpool.GreenPool(concurrency) p = greenpool.GreenPool(concurrency)
count = 1000 count = 1000
it = p.imap(passthru, xrange(count)) it = p.imap(passthru, six.moves.range(count))
latest = -1 latest = -1
while True: while True:
try: try:
@@ -456,7 +460,7 @@ class Stress(tests.LimitedTestCase):
int_pool = IntPool(max_size=intpool_size) int_pool = IntPool(max_size=intpool_size)
pool = greenpool.GreenPool(pool_size) pool = greenpool.GreenPool(pool_size)
for ix in xrange(num_executes): for ix in six.moves.range(num_executes):
pool.spawn(run, int_pool) pool.spawn(run, int_pool)
pool.waitall() pool.waitall()

View File

@@ -9,7 +9,8 @@ from eventlet import hubs
from eventlet.green import socket from eventlet.green import socket
from eventlet.event import Event from eventlet.event import Event
from eventlet.semaphore import Semaphore from eventlet.semaphore import Semaphore
from eventlet.support import greenlets from eventlet.support import greenlets, six
DELAY = 0.001 DELAY = 0.001
@@ -26,7 +27,7 @@ class TestTimerCleanup(LimitedTestCase):
hub = hubs.get_hub() hub = hubs.get_hub()
stimers = hub.get_timers_count() stimers = hub.get_timers_count()
scanceled = hub.timers_canceled scanceled = hub.timers_canceled
for i in xrange(2000): for i in six.moves.range(2000):
t = hubs.get_hub().schedule_call_global(60, noop) t = hubs.get_hub().schedule_call_global(60, noop)
t.cancel() t.cancel()
self.assert_less_than_equal(hub.timers_canceled, self.assert_less_than_equal(hub.timers_canceled,
@@ -40,7 +41,7 @@ class TestTimerCleanup(LimitedTestCase):
hub = hubs.get_hub() hub = hubs.get_hub()
stimers = hub.get_timers_count() stimers = hub.get_timers_count()
scanceled = hub.timers_canceled scanceled = hub.timers_canceled
for i in xrange(2000): for i in six.moves.range(2000):
t = hubs.get_hub().schedule_call_global(60, noop) t = hubs.get_hub().schedule_call_global(60, noop)
eventlet.sleep() eventlet.sleep()
self.assert_less_than_equal(hub.timers_canceled, self.assert_less_than_equal(hub.timers_canceled,
@@ -60,7 +61,7 @@ class TestTimerCleanup(LimitedTestCase):
uncanceled_timers = [] uncanceled_timers = []
stimers = hub.get_timers_count() stimers = hub.get_timers_count()
scanceled = hub.timers_canceled scanceled = hub.timers_canceled
for i in xrange(1000): for i in six.moves.range(1000):
# 2/3rds of new timers are uncanceled # 2/3rds of new timers are uncanceled
t = hubs.get_hub().schedule_call_global(60, noop) t = hubs.get_hub().schedule_call_global(60, noop)
t2 = hubs.get_hub().schedule_call_global(60, noop) t2 = hubs.get_hub().schedule_call_global(60, noop)
@@ -304,7 +305,7 @@ server = eventlet.listen(('localhost', 12345))
t = eventlet.Timeout(0.01) t = eventlet.Timeout(0.01)
try: try:
new_sock, address = server.accept() new_sock, address = server.accept()
except eventlet.Timeout, t: except eventlet.Timeout as t:
pass pass
pid = os.fork() pid = os.fork()
@@ -312,7 +313,7 @@ if not pid:
t = eventlet.Timeout(0.1) t = eventlet.Timeout(0.1)
try: try:
new_sock, address = server.accept() new_sock, address = server.accept()
except eventlet.Timeout, t: except eventlet.Timeout as t:
print "accept blocked" print "accept blocked"
else: else:

View File

@@ -16,7 +16,7 @@ if not patcher.is_monkey_patched('psycopg'):
count = [0] count = [0]
def tick(totalseconds, persecond): def tick(totalseconds, persecond):
for i in xrange(totalseconds*persecond): for i in range(totalseconds*persecond):
count[0] += 1 count[0] += 1
eventlet.sleep(1.0/persecond) eventlet.sleep(1.0/persecond)

View File

@@ -216,7 +216,8 @@ test_monkey_patch_threading = """
def test_monkey_patch_threading(): def test_monkey_patch_threading():
tickcount = [0] tickcount = [0]
def tick(): def tick():
for i in xrange(1000): from eventlet.support import six
for i in six.moves.range(1000):
tickcount[0] += 1 tickcount[0] += 1
eventlet.sleep() eventlet.sleep()
@@ -447,11 +448,11 @@ t2.join()
""" + self.epilogue) """ + self.epilogue)
output, lines = self.launch_subprocess('newmod') output, lines = self.launch_subprocess('newmod')
self.assertEqual(len(lines), 10, "\n".join(lines)) self.assertEqual(len(lines), 10, "\n".join(lines))
for i in xrange(0, 3): for i in range(0, 3):
self.assertEqual(lines[i], "GreenThread-1", lines[i]) self.assertEqual(lines[i], "GreenThread-1", lines[i])
for i in xrange(3, 6): for i in range(3, 6):
self.assertEqual(lines[i], "foo", lines[i]) self.assertEqual(lines[i], "foo", lines[i])
for i in xrange(6, 9): for i in range(6, 9):
self.assertEqual(lines[i], "bar", lines[i]) self.assertEqual(lines[i], "bar", lines[i])
def test_ident(self): def test_ident(self):

View File

@@ -3,6 +3,8 @@ from unittest import TestCase, main
import eventlet import eventlet
from eventlet import Queue from eventlet import Queue
from eventlet import pools from eventlet import pools
from eventlet.support import six
class IntPool(pools.Pool): class IntPool(pools.Pool):
def create(self): def create(self):
@@ -111,14 +113,14 @@ class TestIntPool(TestCase):
def just_put(pool_item, index): def just_put(pool_item, index):
self.pool.put(pool_item) self.pool.put(pool_item)
queue.put(index) queue.put(index)
for index in xrange(size + 1): for index in six.moves.range(size + 1):
pool_item = self.pool.get() pool_item = self.pool.get()
eventlet.spawn(just_put, pool_item, index) eventlet.spawn(just_put, pool_item, index)
for _ in range(size+1): for _ in six.moves.range(size+1):
x = queue.get() x = queue.get()
results.append(x) results.append(x)
self.assertEqual(sorted(results), range(size + 1)) self.assertEqual(sorted(results), list(six.moves.range(size + 1)))
finally: finally:
timer.cancel() timer.cancel()
@@ -153,7 +155,7 @@ class TestIntPool(TestCase):
p.put(x) p.put(x)
gp = eventlet.GreenPool() gp = eventlet.GreenPool()
for i in xrange(100): for i in six.moves.range(100):
gp.spawn_n(do_get) gp.spawn_n(do_get)
gp.waitall() gp.waitall()
self.assertEquals(creates[0], 4) self.assertEquals(creates[0], 4)

View File

@@ -90,10 +90,10 @@ class TestQueue(LimitedTestCase):
for i in range(5): for i in range(5):
q.put(i) q.put(i)
self.assertEquals(list(q.queue), range(5)) self.assertEquals(list(q.queue), list(range(5)))
q.resize(1) q.resize(1)
eventlet.sleep(0) eventlet.sleep(0)
self.assertEquals(list(q.queue), range(5)) self.assertEquals(list(q.queue), list(range(5)))
def test_resize_to_Unlimited(self): def test_resize_to_Unlimited(self):
q = eventlet.Queue(0) q = eventlet.Queue(0)

View File

@@ -4,9 +4,11 @@ warnings.simplefilter('ignore', DeprecationWarning)
from eventlet import pool, coros, api, hubs, timeout from eventlet import pool, coros, api, hubs, timeout
warnings.simplefilter('default', DeprecationWarning) warnings.simplefilter('default', DeprecationWarning)
from eventlet import event as _event from eventlet import event as _event
from eventlet.support import six
from tests import LimitedTestCase from tests import LimitedTestCase
from unittest import main from unittest import main
class TestCoroutinePool(LimitedTestCase): class TestCoroutinePool(LimitedTestCase):
klass = pool.Pool klass = pool.Pool
@@ -105,7 +107,7 @@ class TestCoroutinePool(LimitedTestCase):
timer = timeout.Timeout(1, api.TimeoutError) timer = timeout.Timeout(1, api.TimeoutError)
try: try:
evt = _event.Event() evt = _event.Event()
for x in xrange(num_free): for x in six.moves.range(num_free):
pool.execute(wait_long_time, evt) pool.execute(wait_long_time, evt)
# if the pool has fewer free than we expect, # if the pool has fewer free than we expect,
# then we'll hit the timeout error # then we'll hit the timeout error
@@ -288,7 +290,7 @@ class PoolBasicTests(LimitedTestCase):
int_pool = IntPool(max_size=intpool_size) int_pool = IntPool(max_size=intpool_size)
pool = self.klass(max_size=pool_size) pool = self.klass(max_size=pool_size)
for ix in xrange(num_executes): for ix in six.moves.range(num_executes):
pool.execute(run, int_pool) pool.execute(run, int_pool)
pool.waitall() pool.waitall()

View File

@@ -72,7 +72,7 @@ class TestProc(LimitedTestCase):
p.link(event) p.link(event)
self.assertEqual(event.wait(), 100) self.assertEqual(event.wait(), 100)
for i in xrange(3): for i in range(3):
event2 = _event.Event() event2 = _event.Event()
p.link(event2) p.link(event2)
self.assertEqual(event2.wait(), 100) self.assertEqual(event2.wait(), 100)
@@ -156,7 +156,7 @@ class TestReturn_link(TestCase):
p = self.p = proc.spawn(return25) p = self.p = proc.spawn(return25)
self._test_return(p, True, 25, proc.LinkedCompleted, lambda : sleep(0)) self._test_return(p, True, 25, proc.LinkedCompleted, lambda : sleep(0))
# repeating the same with dead process # repeating the same with dead process
for _ in xrange(3): for _ in range(3):
self._test_return(p, False, 25, proc.LinkedCompleted, lambda : sleep(0)) self._test_return(p, False, 25, proc.LinkedCompleted, lambda : sleep(0))
def _test_return(self, p, first_time, result, kill_exc_type, action): def _test_return(self, p, first_time, result, kill_exc_type, action):
@@ -221,7 +221,7 @@ class TestRaise_link(TestCase):
p = self.p = proc.spawn(lambda : getcurrent().throw(ExpectedError('test_raise'))) p = self.p = proc.spawn(lambda : getcurrent().throw(ExpectedError('test_raise')))
self._test_raise(p, True, proc.LinkedFailed) self._test_raise(p, True, proc.LinkedFailed)
# repeating the same with dead process # repeating the same with dead process
for _ in xrange(3): for _ in range(3):
self._test_raise(p, False, proc.LinkedFailed) self._test_raise(p, False, proc.LinkedFailed)
def _test_kill(self, p, first_time, kill_exc_type): def _test_kill(self, p, first_time, kill_exc_type):
@@ -254,7 +254,7 @@ class TestRaise_link(TestCase):
p = self.p = proc.spawn(sleep, DELAY) p = self.p = proc.spawn(sleep, DELAY)
self._test_kill(p, True, proc.LinkedKilled) self._test_kill(p, True, proc.LinkedKilled)
# repeating the same with dead process # repeating the same with dead process
for _ in xrange(3): for _ in range(3):
self._test_kill(p, False, proc.LinkedKilled) self._test_kill(p, False, proc.LinkedKilled)
class TestRaise_link_exception(TestRaise_link): class TestRaise_link_exception(TestRaise_link):

View File

@@ -1,12 +1,15 @@
import weakref import weakref
from eventlet.green import thread from eventlet.green import thread
from eventlet import greenthread from eventlet import greenthread
from eventlet import event from eventlet import event
import eventlet import eventlet
from eventlet import corolocal from eventlet import corolocal
from eventlet.support import six
from tests import LimitedTestCase, skipped from tests import LimitedTestCase, skipped
class Locals(LimitedTestCase): class Locals(LimitedTestCase):
def passthru(self, *args, **kw): def passthru(self, *args, **kw):
self.results.append((args, kw)) self.results.append((args, kw))
@@ -102,10 +105,9 @@ class Locals(LimitedTestCase):
my_local.foo = o my_local.foo = o
p = eventlet.GreenPool() p = eventlet.GreenPool()
for i in xrange(100): for i in six.moves.range(100):
p.spawn(do_something, i) p.spawn(do_something, i)
p.waitall() p.waitall()
del p del p
# at this point all our coros have terminated # at this point all our coros have terminated
self.assertEqual(len(refs), 1) self.assertEqual(len(refs), 1)

View File

@@ -23,19 +23,24 @@ import gc
from tests import skipped, skip_with_pyevent, LimitedTestCase, main from tests import skipped, skip_with_pyevent, LimitedTestCase, main
from eventlet import tpool, debug from eventlet import tpool, debug
from eventlet.support import six
import eventlet import eventlet
one = 1 one = 1
two = 2 two = 2
three = 3 three = 3
none = None none = None
def noop(): def noop():
pass pass
def raise_exception(): def raise_exception():
raise RuntimeError("hi") raise RuntimeError("hi")
class TestTpool(LimitedTestCase): class TestTpool(LimitedTestCase):
def setUp(self): def setUp(self):
super(TestTpool, self).setUp() super(TestTpool, self).setUp()
@@ -144,24 +149,24 @@ class TestTpool(LimitedTestCase):
@skip_with_pyevent @skip_with_pyevent
def test_wrap_iterator(self): def test_wrap_iterator(self):
self.reset_timeout(2) self.reset_timeout(2)
prox = tpool.Proxy(xrange(10)) prox = tpool.Proxy(range(10))
result = [] result = []
for i in prox: for i in prox:
result.append(i) result.append(i)
self.assertEquals(range(10), result) self.assertEquals(list(range(10)), result)
@skip_with_pyevent @skip_with_pyevent
def test_wrap_iterator2(self): def test_wrap_iterator2(self):
self.reset_timeout(5) # might take a while due to imprecise sleeping self.reset_timeout(5) # might take a while due to imprecise sleeping
def foo(): def foo():
import time import time
for x in xrange(2): for x in range(2):
yield x yield x
time.sleep(0.001) time.sleep(0.001)
counter = [0] counter = [0]
def tick(): def tick():
for i in xrange(20000): for i in six.moves.range(20000):
counter[0]+=1 counter[0]+=1
if counter[0] % 20 == 0: if counter[0] % 20 == 0:
eventlet.sleep(0.0001) eventlet.sleep(0.0001)
@@ -296,7 +301,7 @@ class TpoolLongTests(LimitedTestCase):
def sender_loop(loopnum): def sender_loop(loopnum):
obj = tpool.Proxy(Dummy()) obj = tpool.Proxy(Dummy())
count = 100 count = 100
for n in xrange(count): for n in six.moves.range(count):
eventlet.sleep(random.random()/200.0) eventlet.sleep(random.random()/200.0)
now = time.time() now = time.time()
token = loopnum * count + n token = loopnum * count + n
@@ -306,7 +311,7 @@ class TpoolLongTests(LimitedTestCase):
cnt = 10 cnt = 10
pile = eventlet.GreenPile(cnt) pile = eventlet.GreenPile(cnt)
for i in xrange(cnt): for i in six.moves.range(cnt):
pile.spawn(sender_loop,i) pile.spawn(sender_loop,i)
results = list(pile) results = list(pile)
self.assertEquals(len(results), cnt) self.assertEquals(len(results), cnt)
@@ -339,14 +344,14 @@ from eventlet.tpool import execute
tpool.execute(noop) # get it started tpool.execute(noop) # get it started
gc.collect() gc.collect()
initial_objs = len(gc.get_objects()) initial_objs = len(gc.get_objects())
for i in xrange(10): for i in range(10):
self.assertRaises(RuntimeError, tpool.execute, raise_exception) self.assertRaises(RuntimeError, tpool.execute, raise_exception)
gc.collect() gc.collect()
middle_objs = len(gc.get_objects()) middle_objs = len(gc.get_objects())
# some objects will inevitably be created by the previous loop # some objects will inevitably be created by the previous loop
# now we test to ensure that running the loop an order of # now we test to ensure that running the loop an order of
# magnitude more doesn't generate additional objects # magnitude more doesn't generate additional objects
for i in xrange(100): for i in six.moves.range(100):
self.assertRaises(RuntimeError, tpool.execute, raise_exception) self.assertRaises(RuntimeError, tpool.execute, raise_exception)
first_created = middle_objs - initial_objs first_created = middle_objs - initial_objs
gc.collect() gc.collect()

View File

@@ -23,7 +23,7 @@ def handle(ws):
break break
ws.send(m) ws.send(m)
elif ws.path == '/range': elif ws.path == '/range':
for i in xrange(10): for i in range(10):
ws.send("msg %d" % i) ws.send("msg %d" % i)
eventlet.sleep(0.01) eventlet.sleep(0.01)
elif ws.path == '/error': elif ws.path == '/error':