После прочтения документации Pebble (https://pythonhosted.org/Pebble/), это кажется довольно простым. Тем не менее, я не могу получить ожидаемый результат.
Я начал с примера, приведенного на их веб-сайте
import time
from pebble import concurrent, ProcessExpired
from concurrent.futures import TimeoutError
@concurrent.process(timeout=10)
def function(foo, bar=0):
time.sleep(5)
return foo + bar
future = function(1, bar=2)
try:
result = future.result()
except TimeoutError as error:
print("function took longer than %d seconds" % error.args[1])
except ProcessExpired as error:
print("%s. Exit code: %d" % (error, error.exitcode))
except Exception as error:
print("function raised %s" % error)
print(error.traceback)
else:
print(str(result))
Насколько я понимаю:
- для функции установлен * 101 тайм-аут
- блоки future.result (), пока результат не будет готов
- Выполнение функции займет около 5 секунд
- Вы перейдете непосредственно к else «ветви» попытки / исключая и получим напечатанный результат, то есть «3»
На самом деле, я никогда не получаю желаемый результат, но вместо этого сообщение «функция заняла более 10 секунд».
Можете ли вы сказать мне, что я пропустил, чтобы получить ожидаемый результат (т.е. foo + bar)?