Как отключить функцию python через X миллисекунд?

Я вызываю функцию A(i) в python. Я хочу, чтобы он был завершен, если он выполняется более X миллисекунд. Я рассмотрел несколько способов тайм-аута, включая signal.alarm(), но все они занимают время в целых секундах. Я хочу сделать что-то вроде:

signal.alarm(0.26) //time out after 0.26 seconds

Как мне это сделать?


person Nirvan Anjirbag    schedule 21.12.2017    source источник
comment
Возможный дубликат Python - функция signal.alarm   -  person Galen    schedule 21.12.2017
comment
Вы пробовали функцию сигнала?   -  person user1767754    schedule 21.12.2017
comment
Название этого связанного дубликата немного вводит в заблуждение. Попробуйте использовать signal.setitimer, который принимает число с плавающей запятой.   -  person Galen    schedule 21.12.2017


Ответы (2)


Помимо решения, которое я связал как возможный дубликат, вы также можете использовать ctypes для использования ualarm, если ваша система поддерживает это.

Например, в macOS:

import ctypes

libc = ctypes.CDLL("libc.dylib")

libc.ualarm(10000, 0) # 10,000 microseconds
person Galen    schedule 21.12.2017

Для singal.settimer требуется Unix. В противном случае вы можете использовать time.time()

import time

start = time.time()
now = time.time()
while now - start < 0.26: # 0.26 seconds
   now = time.time()
print (now-start)

вы можете использовать декоратор, поместить свою функцию в цикл while или вызвать исключение, когда таймер закончится (и, вероятно, другие).

Возможно, вам придется подключить таймер.

person Gsk    schedule 21.12.2017