Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comportamento indesejado do comando clock no Google Colab #1

Open
falcaopetri opened this issue Jul 9, 2024 · 0 comments
Open

Comportamento indesejado do comando clock no Google Colab #1

falcaopetri opened this issue Jul 9, 2024 · 0 comments

Comments

@falcaopetri
Copy link

Durante o tutorial da PySE descobrimos que infelizmente o Google Colab não gera bons outputs durante a execução do comando clock.

A implementação atual não está produzindo outputs, embora seja possível acompanhar que as chamadas recursivas estão acontecendo corretamente.

O mesmo comportamento não é observado em um Jupyter Notebook local.

Em testes rápidos, é possível perceber que a combinação de \r, flush e sleep está gerando esse comportamento específico no Google Colab.

Reprodução

Executar o snippet abaixo no Google Colab vs um Jupyter local permite identificar visualmente uma diferença grande: No Colab, \r limpa a linha, enquanto no Jupyter local o \r apenas volta para o início da linha.

print('a', end="")
print('b', end='')
print('\r', end='', flush=True)
print('c', end='')
# c   # output no Colab
# cb  # output no Jupyter local
snippet com sleep
import time

print('a', end="")
print('b', end='')
print('\r', end='', flush=True)
time.sleep(1)
print('c', end="")
print('d', end='')
print('\r', end='', flush=True)
time.sleep(1)

Possibilidades

Para termos algo funcional no Colab, podemos usar diferentes combinações, desde que seja garantido que a linha com o horário não será limpa imediatamente após ser escrita.

Porém, considerando que a linha é sempre apagada, a animação não fica tão fluída quanto no Jupyter local.

Semanticamente, alterar a ordem do (sleep) parece a que faz mais sentido para mim.

  1. Adicionar um comando (flush)
%%lispy

(define clock (lambda ()
    (begin

        (display (car (now)))
        (display (quote :))
        (display (car (cdr (now))))
        (display (quote :))
        (display (car (cdr (cdr (now)))))
        (flush)
        (return)
        (sleep 1)
        (clock))))

(if 1 (clock) 0)
  1. Alterar a ordem do (return)
%%lispy

(define clock (lambda ()
    (begin
        (return)
        (display (car (now)))
        (display (quote :))
        (display (car (cdr (now))))
        (display (quote :))
        (display (car (cdr (cdr (now)))))
        (sleep 1)
        (clock))))

(if 1 (clock) 0)
  1. Alterar a ordem do (sleep)
%%lispy

(define clock (lambda ()
    (begin

        (display (car (now)))
        (display (quote :))
        (display (car (cdr (now))))
        (display (quote :))
        (display (car (cdr (cdr (now)))))
        (sleep 1)
        (return)
        (clock))))

(if 1 (clock) 0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant