У меня проблемы с разработкой стандарта для возврата данных из пользовательских функций, переданных и выполненных в классе, который выполняет функцию как отдельный поток.
Цель состоит в том, чтобы передать аргументы возврата из функции по запросу пользователя.
Но что, если функция не завершится, когда пользователь запросит данные из моего класса?Или, если функция завершается сбоем и, следовательно, не имеет данных (но ее сбой не является критическим для программы, то есть возбуждение исключения является чрезмерным)
Я думал просто вернуть None, но что, если пользовательская функция возвращает None ичто имеет смысл (то есть функция выполнена успешно)?Моей следующей идеей было вернуть вывод функции в списке и None, если данные не были готовы или доступны.Это означало бы, что пользователь должен будет проверить, были ли возвращены данные или нет (проверьте «Нет» или «список»), который я нахожу слегка неэлегатным.
Мне любопытно, существует ли уже стандарт для таких вещей илиесли у кого-то есть более чистое предложение.
пример:
вызов пользователя
def foo():
#...do lots of stuff that takes long time
# return whether stuff worked or not (None if worked False if not)
return success
takes_forever = detach(foo)
# ... do other things
# get data from detached function which has hopefully completed
are_you_done = takes_forever.give_me_data()
Мой класс:
class detach:
def __init__(self, func):
self.detached_func = execute_as_thread(func)
def give_me_data(self)
if self.detached_func.is_done(): # function completed and didnt die
return [self.detached_func.output]
else: # something went wrong or function is still running
return None