渡され、別のスレッドとして関数を実行するクラスで実行されたユーザー関数からデータを返すための標準を開発するのに問題があります。ユーザー関数の戻り値とラップクラスの戻り値を区別する
目的は、ユーザーが要求したときに関数からの戻り引数を渡すことです。
しかし、ユーザーがクラスからデータを要求したときに関数の実行が完了していない場合はどうなりますか?関数が失敗してデータがない場合(例外はプログラムには重大ではない)、
私はただ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
おそらく、dictで返品を試すことができます。 'return {'success':成功、 'origin':origin ...など...}' –