Менеджер асинхронного контекста, который выполняет действие при переключении контекста.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Менеджер асинхронного контекста, который выполняет действие при переключении контекста.

Сообщение Anonymous »

Я хотел бы создать контекстный менеджер для асинхронных функций, который вызывает функцию каждый раз, когда выполнение «переходит» в другой контекст

Например.

Код: Выделить всё

import os
import asyncio

class AsyncContextChangeDir:
def __init__(self, newdir):
self.curdir = os.getcwd()
self.newdir = newdir

async def __aenter__(self):
os.chdir(self.newdir)

async def __aexit__(self, exc_type, exc_value, traceback):
os.chdir(self.curdir)

async def workon_mypath():
async with AsyncContextChangeDir("/tmp"):
print("working in /tmp context manager, cwd:" + os.getcwd()) # /mypath
await asyncio.sleep(100)
print("working in /tmp context manager, cwd:" + os.getcwd()) # ???

async def workon_someotherpath():
await asyncio.sleep(10)
os.chdir("/home")
print("working in other context cwd:" + os.getcwd())

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(
workon_mypath(),
workon_someotherpath()))
Я бы хотел, чтобы вторая печать выводила /mypath и, очевидно, восстанавливала предыдущий рабочий каталог каждый раз, когда выполнение «переключается» на другой контекст

p>

Как лучше всего это сделать?

Подробнее здесь: https://stackoverflow.com/questions/432 ... ext-switch
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»