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

2024-05-23 19:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个密码:

这是我的生成器代码:

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_TYPES是一个由3个订阅组成的数组。但是,这只会为一个订阅生成一个消息流,而我似乎从未为任何其他订阅生成消息流。。。它似乎被一根线挡住了。但它确实会生成多条消息,但只针对一个订阅。为什么会这样?我想发电机阻塞了。。。但我不知道为什么


Tags: 代码fromloop消息密码defsleepsf
1条回答
网友
1楼 · 发布于 2024-05-23 19:30:08

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

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

相关问题 更多 >