EOFError с использованием Input () в Iphython Jupyter Notebook при использовании потоков. - PullRequest
0 голосов
/ 05 апреля 2020

Мне нужно прочитать в 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, когда используя потоки и как это решить. Спасибо!

...