簡體   English   中英

將 python asyncio 與 pyee Event Emitter 結合使用

[英]Combine python asyncio with pyee Event Emitter

我正在嘗試使用pyee 庫中的AsyncIOEventEmitter但沒有成功。 由於某種原因,發出的事件“Hi”永遠不會到達async_handler以完成 asyncio 未來。 我也沒有在網上找到合適的例子。 此外,我嘗試提供當前事件並為AsyncIOEventEmitter使用新的事件循環,但兩者都產生相同的結果。

有人可以幫我嗎? 下面的示例單元測試:

import asyncio
import logging
import pytest
from pyee import AsyncIOEventEmitter

LOG = logging.getLogger(__name__)

@pytest.mark.asyncio
async def test_setup(event_loop):
    LOG.info("1 - start")
    event_emitter = AsyncIOEventEmitter(asyncio.new_event_loop())

    # Create a new Future object.
    future_result = event_loop.create_future()
    LOG.info("2 - emit event")
    event_emitter.emit("event", "Hi")

    @event_emitter.on("event")
    async def async_handler(message):
        LOG.info(">>> %s", message)
        future_result.set_result(message)
        return future_result

    # Wait until *future_result* has a result and print it.
    LOG.info(await future_result)

謝謝!

好的,想通了, async_handler方法必須在測試的早期定義......

這現在有效:

"""Event emitter playground"""
import asyncio
import logging
import pytest
from pyee import AsyncIOEventEmitter

LOG = logging.getLogger(__name__)


@pytest.mark.asyncio
async def test_setup(event_loop):
    """Receive event from emitter and complete future!"""
    LOG.info("1 - start")
    event_emitter = AsyncIOEventEmitter(asyncio.new_event_loop())

    @event_emitter.on("event")
    def async_handler(message):
        LOG.info(">>> %s", message)
        future_result.set_result(message)

    future_result = event_loop.create_future()
    LOG.info("2 - emit event")
    event_emitter.emit("event", "Hi")

    LOG.info(await future_result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM