I've recently run into issues running tornado on Mac OSX Yosemite. When making a request to the tornado server, I get the following traceback:
ERROR:tornado.general:Uncaught exception
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/tornado/http1connection.py", line 674, in _server_request_loop
ret = yield conn.read_response(request_delegate)
File "/Library/Python/2.7/site-packages/tornado/gen.py", line 628, in run
value = future.result()
File "/Library/Python/2.7/site-packages/tornado/concurrent.py", line 109, in result
raise_exc_info(self._exc_info)
File "/Library/Python/2.7/site-packages/tornado/gen.py", line 175, in wrapper
yielded = next(result)
File "/Library/Python/2.7/site-packages/tornado/http1connection.py", line 157, in _read_message
max_bytes=self.params.max_header_size)
File "/Library/Python/2.7/site-packages/tornado/iostream.py", line 227, in read_until_regex
self._try_inline_read()
File "/Library/Python/2.7/site-packages/tornado/iostream.py", line 673, in _try_inline_read
self._add_io_state(ioloop.IOLoop.READ)
File "/Library/Python/2.7/site-packages/tornado/iostream.py", line 881, in _add_io_state
self.fileno(), self._handle_events, self._state)
File "/Library/Python/2.7/site-packages/tornado/ioloop.py", line 677, in add_handler
self._impl.register(fd, events | self.ERROR)
File "/Library/Python/2.7/site-packages/tornado/platform/kqueue.py", line 41, in register
self._control(fd, events, select.KQ_EV_ADD)
File "/Library/Python/2.7/site-packages/tornado/platform/kqueue.py", line 59, in _control
kevents.append(select.kevent(
AttributeError: 'module' object has no attribute 'kevent'
The last line is the most important. I'm fairly certain this is just because of a missing brew package, but I'm at a loss as to what could I'm missing.
Even more mysteriously, I can import select and see that the kevent function exists.
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import select
>>> select.kevent
<type 'select.kevent'>
So I've come up with a temporary solution that I feel a bit guilty about even calling an answer, but here it is anyhow:
1) Open up /usr/local/lib/python2.7/site-packages/tornado/platform/kqueue.py (or similar). 2) Immediately after the
import select
, add the following line:3) Replace the following lines:
with this modified version:
Any better answers would be much appreciated.