Как можно запустить код в ограниченное время? - PullRequest
0 голосов
/ 13 октября 2019

Можно ли запустить код за определенный промежуток времени? например, есть небольшая функция:

   function test(n)
     A = rand(n, n)
     b = rand(n)
   end

Как возможно, что тестовый код будет выполняться в течение 5 секунд, а затем будет остановлен?

Не могли бы вы мне помочь? ? Большое спасибо.

1 Ответ

2 голосов
/ 13 октября 2019

Вот что вы могли бы сделать:


function test(n)
     A = rand(n, n)
     b = rand(n)
end

start_time = time_ns() #Gets current time in nano seconds
seconds = 5000000000 #converted 5 seconds to nano seconds. 

@time begin
    while time_ns() - start_time <= seconds:  
        test(1)
    end

end
#Note this code is designed to provide the logic of implementing this idea and may or may not work in your case. 

Сложная часть, о которой я упомянул в своем комментарии, состоит в том, что все вещи в программировании, основанные на времени, - это наилучшие примеры, а не абсолютные.

См. Некоторые примеры из документов о времени для справки или мой пример ниже:

julia> @time begin
           sleep(0.3)
       end
  0.305428 seconds (9 allocations: 352 bytes)

julia> 

Хотя мы и сказали, что хотим поспать 0,3 секунды, это действительноспал в течение ~ 0,305 секунд. Надеюсь, это должно осветить проблему с попытками сделать это.

Это также возможно в зависимости от того, что вы делаете, чтобы использовать потоки. Если вы хотите дать функции 5 секунд, чтобы она возвращала новое значение, вы можете вызвать эту функцию с помощью потока, а затем проверить переменную, которая принимает возвращаемое значение, чтобы увидеть, было ли оно обновлено. Если это не произойдет в течение 5 секунд, вы можете прервать поток или продолжить. Хотя я не уверен на 100% в этом.

...