在执行回调函数期间暂停主线程

问题描述 投票:0回答:1

我正在尝试使用

page.on
来监听某些事件,一旦触发,我想使用回调函数来处理它并暂停主线程操作直到回调完成。我怎样才能做到这一点?到目前为止,这就是我在这里得到的:

async def mission(self):
    async def handler(request):
        try:
            if "https://some_request.com" in request.url:
                await Solution(page=self.page).resolve()

    logger.info('Main operation')
    self.page.on('request', handler)
    logger.info('Main operation')

回调可以暂停主线程。

python asynchronous python-asyncio playwright playwright-python
1个回答
1
投票

这是“锁”的典型用例(https://docs.python.org/3/library/asyncio-sync.html#lock) - 只有在其他地方未获取它时才能获取它。与

async with
命令结合使用,它可以保护代码块,以便以独占方式执行它们。

如果你在各个部分破坏了你的“主要操作”,只需获取锁即可 在它之前的部分不能与处理程序同时运行:

from asyncio import Lock
...

async def mission(self):
    lock = Lock()
    async def handler(request):
        async with lock:
            if "https://some_request.com" in request.url:
                await Solution(page=self.page).resolve()

    
    # register handler:
    self.page.on('request', handler)
    logger.info('Main operation start')
    while True:
        async with lock:
            logger.info("step of main operation")
            
...
© www.soinside.com 2019 - 2024. All rights reserved.