Thanks for the recommendation - IIS with web2py is a recommended deployment on Windows.

The gevent-mix-up-with-rocket, was based on the stack trace I pasted below. And like I mentioned, this connection was made without any evidence ... so yeah, I was writing this before I gave it too much thought or investigation. In any case, I'll do some more investigation and try to track down this issue.

________________________________________
Kiran Subbaraman
http://subbaraman.wordpress.com/about/

On Thu, 21-04-2016 3:42 AM, Niphlod wrote:
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.

--
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to