Python 阻塞生成器似乎只为一个值生成。为什么?

Python 阻塞生成器似乎只为一个值生成。为什么?,python,multithreading,Python,Multithreading,我有以下代码: async def subscribe(subscription): global RECEIVED_MESSAGES_CACHE ... while True: messageStream = next(generateMessages()) if ENV == 'dev' else await websocket.recv() 这是我的生成器代码: from time import sleep mock_sf_record = '

我有以下代码:

async def subscribe(subscription):
    global RECEIVED_MESSAGES_CACHE
    ...
    while True:
        messageStream = next(generateMessages()) if ENV == 'dev' else await websocket.recv()
这是我的生成器代码:

from time import sleep


mock_sf_record = '{"payload": ...}'


def generateMessages():
    sleep(5)
    yield mock_sf_record
以及调用此代码的代码:

async def subscribe(subscription):
    global RECEIVED_MESSAGES_CACHE
    ...
    while True:
        messageStream = next(generateMessages()) if ENV == 'dev' else await websocket.recv()
正在调用的代码
subscribe

 for subscription in SUBSCRIPTION_TYPES:
        loop.create_task(subscribe(subscription))
    loop.run_forever()

因此,
SUBSCRIPTION\u TYPES
是一个包含3个订阅的数组。但是,这只为单个订阅生成消息流,而我似乎从未为任何其他订阅生成消息流。。。它似乎阻塞在一个线程上。但它确实会生成多条消息,但只针对单个订阅。为什么会这样?我想发电机堵塞了。。。但是我不知道为什么。

我不太清楚你的生成器在做什么,但我认为主要的问题是你的无限循环。如果我理解正确,您只需要迭代,直到耗尽生成的消息

async def subscribe(subscription):
    global RECEIVED_MESSAGES_CACHEmessages = generateMessages()
    ...
    for message in messages
        messageStream = message if ENV == 'dev' else await websocket.recv()
        # Do something with messageStream

我不太明白你的生成器在做什么,但我认为主要的问题是你的无限循环。如果我理解正确,您只需要迭代,直到耗尽生成的消息

async def subscribe(subscription):
    global RECEIVED_MESSAGES_CACHEmessages = generateMessages()
    ...
    for message in messages
        messageStream = message if ENV == 'dev' else await websocket.recv()
        # Do something with messageStream

因此,它确实产生了不止一次。它生成多条消息,但仅针对一个订阅。如果只对其返回值调用一次
next
,为什么
generateMessages
是一个生成器函数?它已包装在while True块中,因此它会生成多次。它生成多条消息,但仅针对一个订阅。如果只对其返回值调用一次
next
,为什么
generateMessages
是一个生成器函数?它已经包装在while True块中了