from gevent import monkey
monkey.patch_all()
import bottle
app = bottle.Bottle()
COUNT = 0
@app.route('/inc', method='GET')
def count():
global COUNT
COUNT += 1
return COUNT
def main():
app.run(
server="gunicorn",
host="0.0.0.0",
port=port,
workers=50,
worker_class="gevent",
debug=False,
reloader=False,
)
if __name__ == '__main__':
main(sys.argv[1:])
when i refresh 0.0.0.0/inc, it is not increasing linearly, it goes to 1 to 0 to 1 to 0 to 2 to 1 to 0, etc
That tells me each thread (gevent worker) maintains COUNT value
how to share global var between all gevent workers?
-- ive confirmed that indeed separate greenlet is keeping track of its own COUNT
INFO:__main__:(<Greenlet at 0x7fcae40bbd00: _handle_and_close_when_done(functools.partial(<bound method GeventWorker.handl, <bound method StreamServer.do_close of <StreamServ, (<gevent._socket3.socket at 0x7fcae256ebe0 object,)>) COUNT 1
INFO:__main__:(<Greenlet at 0x7fcae40bbd00: _handle_and_close_when_done(functools.partial(<bound method GeventWorker.handl, <bound method StreamServer.do_close of <StreamServ, (<gevent._socket3.socket at 0x7fcae256ebe0 object,)>) COUNT 2
INFO:__main__:(<Greenlet at 0x7fcae40bbd00: _handle_and_close_when_done(functools.partial(<bound method GeventWorker.handl, <bound method StreamServer.do_close of <StreamServ, (<gevent._socket3.socket at 0x7fcae256ebe0 object,)>) COUNT 3
INFO:__main__:(<Greenlet at 0x7fcae40bbd00: _handle_and_close_when_done(functools.partial(<bound method GeventWorker.handl, <bound method StreamServer.do_close of <StreamServ, (<gevent._socket3.socket at 0x7fcae256ebe0 object,)>) COUNT 4
INFO:__main__:(<Greenlet at 0x7fcae40bbd00: _handle_and_close_when_done(functools.partial(<bound method GeventWorker.handl, <bound method StreamServer.do_close of <StreamServ, (<gevent._socket3.socket at 0x7fcae409fa00 object,)>) COUNT 1
app.run(
server='gevent',
host="0.0.0.0",
port=port
)
removing gunicorn worked for me