Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.SubprocessTransport

протоколы и транспорты

Транспорт дочернего процесса: get_pid(), get_returncode(), get_pipe_transport(fd), terminate() и kill(). Его возвращает loop.subprocess_exec().

Синтаксис

transport, protocol = await loop.subprocess_exec(Proto, program, *args)

Учащемуся этот уровень обычно не нужен: для TCP есть потоки asyncio.open_connection() и asyncio.start_server(), для процессов — asyncio.create_subprocess_exec(). Объект Process из create_subprocess_exec() — обёртка как раз над этим транспортом, и у него есть pid, returncode, wait() и communicate(). get_returncode() возвращает None, пока процесс жив, — это не «код 0». Транспорт нужно закрыть close(), иначе при сборке мусора будет ResourceWarning.

Примеры

import asyncio
import sys
class Waiter(asyncio.SubprocessProtocol):
    def __init__(self, done):
        self.done = done
    def process_exited(self):
        self.done.set_result(True)
async def main():
    loop = asyncio.get_running_loop()
    done = loop.create_future()
    transport, _ = await loop.subprocess_exec(
        lambda: Waiter(done), sys.executable, '-c', 'raise SystemExit(3)',
        stdin=None, stdout=None, stderr=None)
    print(isinstance(transport.get_pid(), int))  # → True
    await done
    print(transport.get_returncode())  # → 3
    transport.close()
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности