thread waiting for input survives the end of execution
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 45/100
Piste de recherche
Commencez dans ipykernel/kernelbase.py, au niveau de Kernel._input_request, et reproduisez les deux scénarios d’entrée dans des threads décrits dans l’issue. Suivez l’interaction entre la fermeture de stdin_socket et self.session.recv après la fin de l’exécution ; le travail est terminé lorsqu’une entrée en attente dans un thread ne se bloque plus et ne corrompt plus une demande d’entrée ultérieure.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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'{}'
- Langage dominant
- Python
- Étoiles
- 734
- Forks
- 411
- Merge moyen
- 1 j 2 h
- PR mergées (30 j)
- 9
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ipython/ipykernel
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 68/100
-
ipython/ipykernel#1550 · 1 commentaire · 1 réaction · 1 personne assignée ·
Toutes les issues de ipython/ipykernel
Issues similaires
-
bug confirmed issue
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
open-webui/open-webui#30750 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
OpenwaterHealth/openmotion-bloodflow-app#604 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
good first issue
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100