summaryrefslogtreecommitdiff
path: root/eventlet/green
diff options
context:
space:
mode:
authorJakub Stasiak <jakub@stasiak.at>2014-11-02 12:29:13 +0000
committerJakub Stasiak <jakub@stasiak.at>2014-11-04 23:56:59 +0000
commit01093df590b12cc0ee6aa46c2aaf87458cf3ce78 (patch)
tree1fac4642a37bc85e338fc10c184421476e455be7 /eventlet/green
parent67cde41d03c0bccb12fd7d5f6d7e155d6da95e40 (diff)
downloadeventlet-python3-clean.tar.gz
Python 3 compat; Improve WSGI, WS, threading and testspython3-clean
This includes: * patching more tests to pass * removing few unit tests which I think are redundant * repeating SSL socket reads in a loop to read all data (I suspect this is related to the fact that writelines is used in the server code there and Python 3 writelines calls write/send repeatedly while on Python 2 it calls it once; on one hand there's no guarantee that single recv/read will return all data sent by the server, on the other hand it's quite suspicious that the number of required reads seems to be connected to the number of sends on the other side of the connection) * working through Python 2/Python 3 threading and thread differences; the lock code I used is the simplest way I could make the tests pass but will likely need to be modified in order to match the original This commit includes 6bcb1dc3686f72b0f1af803b46883ce4f5e4b8df and closes GH #153
Diffstat (limited to 'eventlet/green')
-rw-r--r--eventlet/green/thread.py12
-rw-r--r--eventlet/green/threading.py13
2 files changed, 20 insertions, 5 deletions
diff --git a/eventlet/green/thread.py b/eventlet/green/thread.py
index 66bb581..d2d492a 100644
--- a/eventlet/green/thread.py
+++ b/eventlet/green/thread.py
@@ -1,6 +1,6 @@
"""Implements the standard thread module, using greenthreads."""
from eventlet.support.six.moves import _thread as __thread
-from eventlet.support import greenlets as greenlet
+from eventlet.support import greenlets as greenlet, six
from eventlet import greenthread
from eventlet.semaphore import Semaphore as LockType
@@ -13,6 +13,16 @@ error = __thread.error
__threadcount = 0
+if six.PY3:
+ def _set_sentinel():
+ # HACK this is dummy code
+ # TODO possibly reimplement this:
+ # https://hg.python.org/cpython/file/b5e9bc4352e1/Modules/_threadmodule.c#l1203
+ return allocate_lock()
+
+ TIMEOUT_MAX = __thread.TIMEOUT_MAX
+
+
def _count():
return __threadcount
diff --git a/eventlet/green/threading.py b/eventlet/green/threading.py
index 5c56ba1..3176261 100644
--- a/eventlet/green/threading.py
+++ b/eventlet/green/threading.py
@@ -2,12 +2,17 @@
from eventlet import patcher
from eventlet.green import thread
from eventlet.green import time
-from eventlet.support import greenlets as greenlet
+from eventlet.support import greenlets as greenlet, six
-__patched__ = ['_start_new_thread', '_allocate_lock', '_get_ident', '_sleep',
- 'local', 'stack_size', 'Lock', 'currentThread',
+__patched__ = ['_start_new_thread', '_allocate_lock',
+ '_sleep', 'local', 'stack_size', 'Lock', 'currentThread',
'current_thread', '_after_fork', '_shutdown']
+if six.PY2:
+ __patched__ += ['_get_ident']
+else:
+ __patched__ += ['get_ident', '_set_sentinel']
+
__orig_threading = patcher.original('threading')
__threadlocal = __orig_threading.local()
@@ -15,7 +20,7 @@ __threadlocal = __orig_threading.local()
patcher.inject(
'threading',
globals(),
- ('thread', thread),
+ ('thread' if six.PY2 else '_thread', thread),
('time', time))
del patcher