В опциях uwsgi, счетчик gevent странный. Максимальное количество gevent больше, чем uwsgi gevent - PullRequest
0 голосов
/ 07 июня 2019

Я использую колбу, 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.

...