forget about uwsgi on windows. never really landed as
production-ready. fortunately iis can run python without any hiccup
and it's the current recommended way to deploy web2py in production on
windows.
that being said, I'm really eager to know how the hell you're getting
gevent mixed up with web2py's internal webserver, which is not at all
compatible with gevent.
On Wednesday, April 20, 2016 at 7:21:09 PM UTC+2, Kiran Subbaraman wrote:
Hello all,
I use Windows 10 based laptop for my development. By default,
web2py serves its content via the rocket server.
My application makes use of the 'default' redis client () to
connect to the local redis server.
I started noticing a stacktrace, in the cmd prompt, from within
which web2py has started:
|
CreatedbyMassimoDiPierro,Copyright2007-2016
Version2.14.3-stable+timestamp.2016.03.26.17.54.43
Databasedrivers
available:psycopg2,pymysql,imaplib,sqlite3,pg8000,pyodbc,mysqlconnector
please visit:
http://127.0.0.1:8000/ <http://127.0.0.1:8000/>
starting browser...
please visit:
http://127.0.0.1:8000/ <http://127.0.0.1:8000/>
starting browser...
2016-04-2020:26:54,003-Rocket.Errors.Port8000-ERROR
-Traceback(most recent call last):
File"d:\code\git\web2py\gluon\rocket.py",line 587,inlisten
sock,addr =self.listener.accept()
File"D:\programs\open\python27\lib\site-packages\gevent\socket.py",line
316,inaccept
self._wait(self._read_event)
File"D:\programs\open\python27\lib\site-packages\gevent\socket.py",line
300,in_wait
self.hub.wait(watcher)
File"D:\programs\open\python27\lib\site-packages\gevent\hub.py",line
348,inwait
result =waiter.get()
File"D:\programs\open\python27\lib\site-packages\gevent\hub.py",line
575,inget
returnself.hub.switch()
File"D:\programs\open\python27\lib\site-packages\gevent\hub.py",line
338,inswitch
returngreenlet.switch(self)
LoopExit:Thisoperation would block forever
|
The error in the error-ticket is:
|
<class'gevent.hub.LoopExit'>This operation would block forever
Version
web2py™ Version 2.14.3-stable+timestamp.2016.03.26.17.54.43
Python Python 2.7.10: D:\programs\open\python27\python.exe
(prefix: D:\programs\open\python27)
Traceback
Traceback (most recent call last):
File "d:\code\git\web2py\gluon\restricted.py", line 227, in
restricted
exec ccode in environment
File
"d:/code/git/web2py/applications/myapp/controllers/myservice.py",
line 99, in <module>
File "d:\code\git\web2py\gluon\globals.py", line 417, in <lambda>
self._caller = lambda f: f()
File "d:\code\git\web2py\gluon\cache.py", line 661, in wrapped_f
rtn = func()
File
"d:/code/git/web2py/applications/myapp/controllers/myservice.py",
line 68, in data
data = api.get_data(url)
File "applications\myapp\modules\data\api.py", line 145, in get_data
return _get_data_for(url) if url else None
File "applications\myapp\modules\data\api.py", line 164, in
_get_data_for
force_reload=rebuild
File "applications\myapp\modules\myapp_constants.py", line 460,
in get_from_cache
cache_value = redis_cache.get(key)
File
"D:\programs\open\python27\lib\site-packages\redis\client.py",
line 880, in get
return self.execute_command('GET', name)
File
"D:\programs\open\python27\lib\site-packages\redis\client.py",
line 573, in execute_command
return self.parse_response(connection, command_name, **options)
File
"D:\programs\open\python27\lib\site-packages\redis\client.py",
line 585, in parse_response
response = connection.read_response()
File
"D:\programs\open\python27\lib\site-packages\redis\connection.py",
line 577, in read_response
response = self._parser.read_response()
File
"D:\programs\open\python27\lib\site-packages\redis\connection.py",
line 238, in read_response
response = self._buffer.readline()
File
"D:\programs\open\python27\lib\site-packages\redis\connection.py",
line 168, in readline
self._read_from_socket()
File
"D:\programs\open\python27\lib\site-packages\redis\connection.py",
line 126, in _read_from_socket
data = self._sock.recv(socket_read_size)
File
"D:\programs\open\python27\lib\site-packages\gevent\socket.py",
line 394, in recv
self._wait(self._read_event)
File
"D:\programs\open\python27\lib\site-packages\gevent\socket.py",
line 300, in _wait
self.hub.wait(watcher)
File
"D:\programs\open\python27\lib\site-packages\gevent\hub.py", line
348, in wait
result = waiter.get()
File
"D:\programs\open\python27\lib\site-packages\gevent\hub.py", line
575, in get
return self.hub.switch()
File
"D:\programs\open\python27\lib\site-packages\gevent\hub.py", line
338, in switch
return greenlet.switch(self)
LoopExit: This operation would block forever
|
I do not see this issue on my ubuntu linux deployment.
I suspected, without any evidence, that it may have to do with
process/threading between the rocket server to redis_client, and
that it could do with the monkey_patching of socket in the gevent
world. Again, I do not have any evidence, other than the stacktrace.
The knee-jerk reaction was to see if using uwsgi or nginx on
windows alleviates this issue. The nearest discussion thread, that
I came across, that talks about setting up such an environment
(web2py without rocket, but uwsgi / nginx) is this one:
https://groups.google.com/forum/#!searchin/web2py/nginx$20windows/web2py/NdV0CVX8zZs/wWiRxogLz4sJ
<https://groups.google.com/forum/#%21searchin/web2py/nginx$20windows/web2py/NdV0CVX8zZs/wWiRxogLz4sJ>
Any thoughts on what I could do or take a look at will help. Thanks.
In the meantime, I also intend to
* create a minimal app that is able to recreate this issue.
* take a look at the web2py's redis-cache.
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google
Groups "web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to web2py+unsubscr...@googlegroups.com
<mailto:web2py+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.