Я работаю над вычислением множества треугольников со специальными свойствами для друга-теоретика числа. Существует бесконечно много этих треугольников, но они требуют много вычислительной силы для поиска.Пользовательский ввод для прерывания бесконечного цикла?
У нас есть бесконечный цикл, проходящий через различные комбинации b, d. Когда программа заканчивается, она вызывает функцию go (dict) для экспорта найденных треугольников. В настоящее время мы рассказываем программе в начале, какой промежуток времени для запуска. Это вызывает проблемы, когда мы понимаем, что нам нужна вычислительная мощность для чего-то другого, но у программы все еще есть часы для запуска, и мы не хотим терять треугольники, которые он уже вычислил, выйдя из программы, не запуская go (dict).
В идеале мы хотим, чтобы какой-то пользовательский ввод вызывал прерывание цикла программой, запустите go (dict) с любой текущей версией словаря, который он удерживает в памяти, а затем выйдите. Попытка с atexit.register (go, dict) оказалась неудачной, так как она многократно вызывается в цикле и выполняется много раз, когда программа завершается.
(См сокращенного кода цикла ниже)
interval = eval(input("How many hours shall I run for? "))*3600
starttime = time.time()
dict = {}
b = start_value
while True:
for d in range (1, b):
compute stuff
if (condition):
add triangle to dict
if (time.time()-starttime)>interval:
go(dict)
return
b +=1
Какая операционная система вы используете? – martineau