thread waiting for input survives the end of execution
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 45/100
Direção de pesquisa
Comece em ipykernel/kernelbase.py, em Kernel._input_request, e reproduza os dois cenários de entrada em threads descritos na issue. Rastreie como o fechamento de stdin_socket e self.session.recv interagem após o fim da execução; a tarefa estará concluída quando uma entrada pendente em uma thread não travar mais nem corromper uma solicitação de entrada posterior.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
If a thread asks for input after the end of execution, it will crash as expected. If it asks for input before the end of execution, it will hang in a strange state that will crash ipykernel as soon as another input request is sent.
The offending line is: self.session.recv(self.stdin_socket, 0) in kernelbase.Kernel._input_request. If stdin_socket.close() is called before recv, it will crash. If stdin_socket.close() is called after self.session.recv(self.stdin_socket, 0), it will hang forever.
Ask after end
In [1]: import threading
...: import time
...:
...: def getinput():
...: time.sleep(1)
...: print(input('thread:'))
...:
...: thread = threading.Thread(target=getinput)
...: thread.start()
...: time.sleep(0.5)
thread:Exception in thread Thread-12:
Traceback (most recent call last):
File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-1-2acffc6600f3>", line 6, in getinput
print(input('thread:'))
EOFError: EOF when reading a line
In [2]: print(input('main:'))
main:test
test
In [3]:
Ask before end
In [1]: import threading
...: import time
...:
...: def getinput():
...: time.sleep(0.5)
...: print(input('thread:'))
...:
...: thread = threading.Thread(target=getinput)
...: thread.start()
...: time.sleep(1)
thread:
In [2]: print(input('main:'))
main:hi
[IPKernelApp] WARNING | Invalid Message:
Traceback (most recent call last):
File "/Users/quentinpeter/pyscripts/ipykernel/ipykernel/kernelbase.py", line 884, in _input_request
ident, reply = self.session.recv(self.stdin_socket, 0)
File "/usr/local/lib/python3.7/site-packages/jupyter_client/session.py", line 835, in recv
idents, msg_list = self.feed_identities(msg_list, copy)
File "/usr/local/lib/python3.7/site-packages/jupyter_client/session.py", line 866, in feed_identities
idx = msg_list.index(DELIM)
ValueError: b'<IDS|MSG>' is not in list
[IPKernelApp] WARNING | Invalid Message:
Traceback (most recent call last):
File "/Users/quentinpeter/pyscripts/ipykernel/ipykernel/kernelbase.py", line 884, in _input_request
ident, reply = self.session.recv(self.stdin_socket, 0)
File "/usr/local/lib/python3.7/site-packages/jupyter_client/session.py", line 840, in recv
raise e
File "/usr/local/lib/python3.7/site-packages/jupyter_client/session.py", line 837, in recv
return idents, self.deserialize(msg_list, content=content, copy=copy)
File "/usr/local/lib/python3.7/site-packages/jupyter_client/session.py", line 945, in deserialize
raise ValueError("Invalid Signature: %r" % signature)
ValueError: Invalid Signature: b'{}'
- Linguagem predominante
- Python
- Estrelas
- 734
- Forks
- 411
- Merge médio
- 1d 2h
- PRs com merge (30d)
- 9
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de ipython/ipykernel
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 68/100
-
ipython/ipykernel#1550 · 1 comentário · 1 reação · 1 responsável ·
Todas as issues de ipython/ipykernel
Issues semelhantes
-
bug confirmed issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
open-webui/open-webui#30750 · 1 comentário ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
OpenwaterHealth/openmotion-bloodflow-app#604 · 1 comentário ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
good first issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100