Мне нужно прочитать в 4 строки ввода. Первая строка дает число n, чтобы сказать, что дерево имеет n узлов. Следующие n строк соответствуют формату «Ключ», левый дочерний индекс, правый дочерний индекс.
Когда я пытаюсь сделать это в I python Jupyter Notebook, я обнаружил кое-что интересное.
import sys, threading
sys.setrecursionlimit(10**7) # max depth of recursion
threading.stack_size(2**25) # new thread will get stack of such size
def IsBinarySearchTree(tree):
# Implement correct algorithm here
return True
if __name__=='__main__':
nodes = int(input().strip())
tree = []
for i in range(nodes):
tree.append(list(map(int, input().strip().split())))
if IsBinarySearchTree(tree):
print("CORRECT")
else:
print("INCORRECT")
При использовании, если name == ' main ' :, проблем нет. Программа выведет CORRECT после ввода
3
2 1 2
1 -1 -1
3 -1 -1
Однако, если мы реализуем тот же код с помощью многопоточности. Вот и EOFErr will ocur.
def main():
nodes = int(input().strip())
tree = []
for i in range(nodes):
tree.append(list(map(int, input().strip().split())))
if IsBinarySearchTree(tree):
print("CORRECT")
else:
print("INCORRECT")
threading.Thread(target=main).start()
Это вывод после ввода первой строки как 3
Exception in thread Thread-9:
Traceback (most recent call last):
File "C:\Anaconda3\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Anaconda3\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-18-aaf5afe23f69>", line 5, in main
tree.append(list(map(int, input().strip().split())))
EOFError: EOF when reading a line
Буду признателен, если кто-нибудь сможет объяснить, почему тот же код вызывает EOFError, когда используя потоки и как это решить. Спасибо!