我正在尝试使用
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')
回调可以暂停主线程。
这是“锁”的典型用例(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")
...