
committed by
Sergey Shepelev

parent
cfdd9a922c
commit
2b2f0a96b4
2
AUTHORS
2
AUTHORS
@@ -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
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@@ -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()
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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")
|
||||||
|
@@ -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:
|
||||||
|
@@ -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?
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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())
|
||||||
|
|
||||||
|
@@ -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:
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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.
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
|
@@ -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()
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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:
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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):
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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):
|
||||||
|
@@ -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)
|
||||||
|
|
@@ -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()
|
||||||
|
@@ -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':
|
||||||
|
Reference in New Issue
Block a user