在uwsgi选项中,事件计数很奇怪。 gevent的最大数量多于uwsgi gevent选项

时间:2019-06-07 07:37:36

标签: flask uwsgi gevent

我正在使用带有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。

0 个答案:

没有答案