Я использую колбу, uwsgi с опцией Gevent.
Я установил параметры uwsgi следующим образом;процесс = 3 (работники = 3), gevent = 5.
Так что я думал, что максимальное количество gevent будет 15 (process * gevent) или около.Но максимальное число gevent больше.
Я не могу понять почему.
Я учусь подсчитывать значение в многопроцессорной обработке: Счетчик приращений для каждого доступа к представлению Flask
Это результат.
GEVENT COUNT 2 GEVENT MAX-COUNT: 2
GEVENT COUNT 3 GEVENT MAX-COUNT: 3
GEVENT COUNT5 ПАРАМЕТР МАКС-СЧЕТА: 5
ПАРАМЕТР ГЕВЕНТА 6 МАКС-ПАРАМЕТР ГЕВЕНТА: 6
ПАРАМЕТР ГЕВЕНТА 8 МАКС-СЧЕТ ГЕВЕНТА: 8
ПАРАМЕТР ГЕВЕНТА 10 ПАРАМЕТР МАКС.: 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.