我正在使用带有gevent选项的flask,uwsgi。
我这样设置uwsgi选项;过程= 3(工人= 3),事件= 5。
所以我认为gevent的最大数量将是15(process * gevent)或接近。 但是gevent的最大数量更多。
我不明白为什么。
我了解如何在多处理中计算价值: Increment counter for every access to a Flask view
这是结果。
GEVENT COUNT 2 GEVENT MAX-COUNT:2
GEVENT COUNT 3 GEVENT MAX-COUNT:3
GEVENT COUNT 5 GEVENT MAX-COUNT:5
GEVENT COUNT 6 GEVENT MAX-COUNT:6
GEVENT COUNT 8 GEVENT MAX-COUNT:8
GEVENT COUNT 10 GEVENT MAX-COUNT:10
GEVENT COUNT 16 GEVENT MAX-COUNT:16
GEVENT COUNT 16 GEVENT MAX-COUNT:16
GEVENT COUNT 18 GEVENT MAX-COUNT:18
...
from multiprocessing import Value
GEVENT_MAX_COUNTER = Value('i', 0)
GEVENT_COUNTER = Value('i', 0)
def gevent_counter(GEVENT_COUNTER):
from sqlManager import Engine
engine = Engine['local']
with GEVENT_MAX_COUNTER.get_lock():
GEVENT_MAX_NUM = GEVENT_MAX_COUNTER.value
GEVENT_MAX_NUM = GEVENT_COUNTER if GEVENT_COUNTER > GEVENT_MAX_NUM else GEVENT_MAX_NUM
GEVENT_MAX_COUNTER.value = GEVENT_MAX_NUM
sentence = 'GEVENT COUNT {} GEVENT MAX-COUNT : {} \n'.format(GEVENT_COUNTER, GEVENT_MAX_NUM)
pool_sentenct = 'POOL: {} \n'.format(engine.pool.status())
file_type_g = 'w'
file_type_p = 'w'
if os.path.exists(str(os.getpid()) + '_gevent.txt'):
file_type_g = 'a'
if os.path.exists(str(os.getpid()) + '_pool_size.txt'):
file_type_p = 'a'
with open(str(os.getpid()) + '_gevent.txt', file_type_g) as file:
file.write(sentence)
with open(str(os.getpid()) +'_pool_size.txt', file_type_p) as file:
file.write(pool_sentenct)
@app.route('/test')
def test_gevent():
with GEVENT_COUNTER.get_lock():
GEVENT_COUNTER.value += 1
gevent_counter(GEVENT_COUNTER)
do_somethig()
with GEVENT_COUNTER.get_lock():
GEVENT_COUNTER.value -= 1
[uwsgi]
socket = /tmp/uwsgi.sock
chown-socket = nginx:nginx
chmod-socket = 664
loop = gevent
gevent = 5
gevent-monkey-patch = true
cheaper = 2
async = 1000
process = 3
# maximum number of workers that can be spawned
workers = 3
listen=2048
我期望GEVENT MAX-COUNT = 15或小于15。
我不明白GEVENT MAX-COUNT为什么超过15。