python mip max_seconds не останавливается - PullRequest
0 голосов
/ 06 апреля 2020

Я использую python -mip (с фоном с открытым исходным кодом), и когда я задаю, например,

self.max_seconds=80 
model.optimize(max_seconds=self.max_seconds, max_nodes=self.max_nodes)

Модель все еще может оптимизироваться в течение нескольких часов. Таким образом, вопрос состоит из двух частей:

  1. Почему этот параметр не работает? Должно ли оно использоваться по-другому?

  2. Пока я не могу решить проблему напрямую. Есть ли способ инкапсулировать его (например, вызвать его как процесс и убить его, если он не возвращается вовремя) Я пробовал это, но это не останавливает ... (возможно, он имеет более одного процесса и не все убиты исключением повышения? import mip, sys, threading

    try:
        timer = threading.Timer(self.max_seconds * 1.5, quit, args=["optimizing"])
        timer.start()
        timed_out = False
        model.preprocess = 0
        model.optimize(max_seconds=self.max_seconds , max_nodes=self.max_nodes)
    except KeyboardInterrupt as e:
        timed_out = True
    except TimeoutError as e:
        timed_out = True
    finally:
        timer.cancel()
    
    def quit(fn_name):
        sys.stderr.flush()  # stderr is buffered
        raise TimeoutError
    
...