08 - Tornando o projeto assíncrono # Questão 1 Escalonamento no asyncio é a capacidade do código de: Executar tarefas simultaneamenteAlternar entre a execução de funçõesFazer com que o código seja bloqueanteAlternar entre a execução de corrotinas # Questão 2 Dizemos que um código é cooperativo quando: Quando ele cede a vez para outro código ser executadoQuando ele usa a palavra reservada awaitQuando ele permite ser escalonadoQuando ele usa async def Enviar # Questão 3 Sobre o uso de await no código, podemos afirmar que: @pytest.mark.asyncio async def test_create_user(session, mock_db_time): with mock_db_time(model=User) as time: new_user = User( username='alice', password='secret', email='teste@test' ) session.add(new_user) await session.commit() Permite escalonamento durante a comunicação com o banco de dadosBloqueia a execução até que o commit seja concluídoCria uma nova corrotinaFaz cooperação com o banco de dados # Questão 4 Qual a função do loop de eventos? Gerenciar a execução de corrotinas de maneira ordenadaExecutar corrotinas simultaneamenteEscalonar entre código cooperativoTornar a execução não bloqueante Enviar # Questão 5 Qual a necessidade de usarmos asyncio.run? run(corrotina()) Executar tarefas não bloqueantes de forma bloqueanteBloquear o código durante execuções não bloqueantesTonar a execução de funções síncronas em assíncronas # Questão 6 Qual a função do greenlet no projeto? Permitir que o SQLAlchemy faça programação assíncronaPermitir que o coverage cubra funções asyncSubstituir o asyncioCriar loops de eventos # Questão 7 Qual a função da flag -k no pytest? Executar todos os testes com nomes correspondentes a flagListar todos os testes que podem ser executadosMatar (kill) todos os testes que não funcionaremPausar a execução dos testes caso um falhe # Questão 8 Qual a função de pytest_asyncio.fixture no código? @pytest_asyncio.fixture async def session(): # ... Cria uma fixture bloqueanteCria uma fixture que só pode ser usada em testes assíncronosCria uma fixture executada pelo loop de eventos # Questão 9 Ao que se refere expire_on_commit=False na criação da sessão? async def get_session(): async with AsyncSession(engine, expire_on_commit=False) as session: yield session Expira os dados não commitadosNão limpa a sessão após o commitCria uma sessão com tempo de vida # Questão 10 Adicionar async def ao código cria: Uma função assíncronaUma corrotinaUm loop de eventosUm código bloqueante