5459
0. Grupo de conversa sobre a ling de prog Python 1. Sem pirataria 2. respeite o coleguinha 3. respeita as minas 4. no seja babaca 5. Sem links de grupos do WhatsApp 6. Se alguém daqui te importunar no privado avise um admin
(essa aqui que voce curtiu agorinha foi a parte que nào funciona dentro do asyncio - só em código síncrono, single threaded)
Читать полностью…
Entao - no fim, com o signal handler por dentro do loop de asyncio, o negócio fica bem tranquilo --
é só o singla handler "nao fazer nada" que o "CTRL+C" é engolido (só lembrar de adicionar o outro sinal lá de ctrl_c se o sistema for windows) - aí voce consegue interagir com o loop (Dá pra agendar tasks com "call_soon", colocar coisas em queues, mudar variáveis globais - só nào recomendo interagir com "contextvars" de dentro do signalhandler.
```
todas as comunidades de programação no telegram são bem prestativas, vale a pena olhar
Читать полностью…
Muito obrigado Léo, vou continuar procurando então, preciso melhorar muito o que eu sei atualmente pra poder aproveitar a oportunidade que me encontro atualmente
Читать полностью…
A sim, no caso esse seria o seu valor? Ou está falando no geral?
Читать полностью…
sempre depende do quanto voce ta disposto a pagar, claro.
mas a hora aula pra isso fica na base de 100 reais a hora se a for profissional.
e por fim, os testes que fiz ontem, com o jeito de esperar o KayboardInterrupt _fora_ do loop, mudar o estado global lá de fora, e entrar de novo no loop:
https://gist.github.com/jsbueno/a51b96e7344babedf5860b86a64d24bd
mas o google trouxe isso aqui - é interessante pq é um core devel do Python (um dos "top 10" da linguagem, na real), também em duvida sobre o melhor pattern pra tratar exceções em loops async (nao tem a ver com ctrl-c diretamente) : https://discuss.python.org/t/asyncio-tasks-and-exception-handling-recommended-idioms/23806
Читать полностью…
tem um jeito de colocar um "asyncio loop exception handler" também - mas tenho a impressao de que ele não é chamado no ctrl + c (que é uma "BaseException" - e não se enquadra como subclasse de "Exception")
Kkkkkk, faz sentido!
Eu ontem tava quebrando a cabeça, mas hoje já acordei com uma ideia idiotamente simples que vai funcionar 😅
Mas obrigado pela ajuda, li tudo, e tem muita coisa boa! Vou testar depois essa solução de qualquer forma, para testar e ver no que dá. Vai ser um ótimo experimento kkkkkk
"Se está soando complicado é por que .... talvez seja complicado :-)" o zen of Python já manda na lata que "If the implementation is hard to explain, it's a bad idea. " - nao deve ser por aí entao. :-)
Читать полностью…
(hmmm fiz uns testes aqui: mais facil falar do que fazer:
O "ctrl + c" vai realmente votlar da chamada "asyncio.run" de uma vez: sem chance de tratar a interrupcao dentro de uma task com try/except . Se usar manualmente "loop.run_until_complete" - voce consegue re-entrar no loop que foi interrompido, e continuar as tasks que estao lá - (com outra chamada ao "run_until_complete" )
Entao, na clausula except no código _sincrono_, FORA do eventloop - voce tem que atualizar algum estado global, que suas tasks vao checar, e cancelar as tasks relevantes, por dentro do código assincrono, depois que re-entrar nele.
Se está soando complicado é por que .... talvez seja complicado :-)
O callback de signal pode funcionar - mas tambem vai te render umas experiencias "interessantes".
(acho que tem uma opcao para um signal handler dentro do loop asyncio
https://docs.python.org/3/library/asyncio-eventloop.html#unix-signals aqu - nao do modulo singal)
os outros sinais nao tem como pegar com try/except, mas ctrl+c tem - aproveita! :-)
Читать полностью…
mas signal em geral pode ser complicado - no caso especifico de ctrl+c, só colocar o "try...except KeyboardInterrupt" em volta da sua entrada no async (isso é o "asyncio.run()" deve ficar dentro desse try) deve ser suficiente. ou voce teve problemas com isso?
Aí, pode colocar blocos "try/finally" pras finaliacoes especifcias na parte mais interna do codigo ( ou mesmo outros 'except KeyboardInterrupt' - mas sempre termine o bloco com "raise" de novo, pra escecao continuar se propagando até finalizar o bloco mais de fora)
Não sei qual os está usando.
Se for no windows tem um sinal pra isso. Exatamente o que você quer
https://docs.python.org/3/library/signal.html#signal.CTRL_C_EVENT
import signal, asyncioЧитать полностью…
async def a():
print("starting")
await asyncio.sleep(3)
print("finishing")
def handler(loop):
print(f"ctrl + c detected in task in {loop}")
def main():
loop = asyncio.new_event_loop()
loop.add_signal_handler(signal.SIGINT, handler, loop)
loop.run_until_complete(a())
loop.close()
main()
Faz sentido, muito obrigado pela atenção, a gente consegue seguir no PV?
Читать полностью…
geral.
eu nao moro no brasil, meu valor eh de 100 euros/hora.
se seu interesse é em PHP faz mais sentido procurar em grupos específicos de PHP, não tenho certeza se posso postar aqui mas se pesquisar php e laravel nos grupos do telegram você acha os brasileiros
Читать полностью…
isso se a pessoa morar no brasil pra dar a aula, porque custo de vida nao eh igual em todo mundo.
Читать полностью…
Pessoal, me tira uma dúvida, estava precisando de um professor ou tutor de programação, para linguagens de js e alguns de seus frameworks, PHP e Laravel, SQL, queria saber se existe alguém aqui que tenha essas competências e também saber sobre valores, preciso de ajuda porque notei que sozinho não tenho conseguido avançar mais, então queria ver se existe alguém que poderia me ensinar, claro, discutindo valores normalmente, coisa de 1h por dia ou a combinar
Читать полностью…
Mais uma curiosidade que a gente não se dá conta também:
Se sua task para num await, e enquanto ela está awaitando uma exceção acontece (tipo o KeyboardInterrupt), essa exceção NAO ACONTECE dentro da task: por que do ponto de vista da task, ela está "processando a linha que tem o await" - mas "no mundo real" o interpretador tá rodando código em outro lugar - no loop, e em outras tasks - o 'KeyboardInterrupt" não acontece dentro da task:
Dá pra ver com um negocio desses:
async def b(n):Читать полностью…
try:
await asyncio.sleep(5)
except KeyboardInterrupt:
print(f"CTRL+C on task {n}")
async def c():
t = asyncio.create_task(b(1))
await asyncio.sleep(6)
await t
asyncio.run(c())
https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.set_exception_handler
A noticia triste: acabou a era de "quer buscar algo na internet? por no google e clica no primeiro link" _ busquei com os termos "python asyncio set exception handler¨ e o google NAO POE um link pra pagina correta na documentação (ele até tem um link pros dos do asyncio, mas não é trivial navegar a partir de lá) - precisei por a mesma busca no duckduckgo .
eu fiquei mais um pouco ontem, e fiz funcionar a "abordagem dificil" que coloquei acima - mas tenta o in-loop signal handler mesmo -
Читать полностью…
🐍 [Vaga] Python e Node.js Developer (CLT)
A ProFUSION está contratando devs para trabalhar em projetos internacionais com Python (Django, FastAPI) e Node.js (Express, NestJs, Fastfy).
O que oferecemos:
- CLT com benefícios completos (plano de saúde/odonto sem coparticipação, VR R$1.100, PLR)
- Híbrido/Remoto:
- Híbrido 2x/semana para quem é de Campinas/SP ou Curitiba
- Híbrido 1x/semana para quem está a até 120 km destas cidades (SP inclusive)
- 100% Remoto caso contrário
- Empresa fundada e gerida por devs — code review é cultura aqui, não burocracia
- Mentoria, aulas de inglês, incentivo a palestras e publicações
Sobre nós:
Somos uma empresa de desenvolvimento de software de Campinas-SP. Contribuímos para projetos open source tais como WebKit, ngx-socket-io, Apollo, Turso e SystemD.
Acesse nosso site e nosso blog para nos conhecer melhor:
https://profusion.mobi/index-en.html
https://medium.com/profusion-engineering
Interessou?
👉 Detalhes e inscrição: hhttps://sites.google.com/profusion.mobi/vagas/home/python_node_dev_pybr
TLDR: veja https://docs.python.org/3/library/asyncio-eventloop.html#unix-signals para ter signal handling "por dentro" do loop de eventos.
Читать полностью…
ah - vi a parte que voce quer "voltar pro main do script": é isso - em qualquer ponto que voce tiver um "except KeyboardInterrupt" e nao der "raise" de volta, voce tem o controle de volta, e seu codigo Python continua rodando no final do bloco except.
Читать полностью…
com um callback de signal, voce vai estar rodando "paralelo" as tasks asyncio que stao em execucao, na mesma trhread, mas com o código interrompido em um ponto aleatorio em uma delas (nao só onde tem "await") .
Читать полностью…
Duas coisas da biblioteca padrão que podem te ajudar. Signal e também aexit
Читать полностью…