我在開發一個用於返回用戶函數的數據的標準時遇到了問題,這些用戶函數在作爲單獨線程運行該函數的類中傳遞和執行。區分用戶函數返回和包裝類返回
目標是在用戶請求時從函數傳遞返回參數。
但是,如果當用戶從我的班級請求數據時功能沒有完成運行會怎樣?或者,如果函數失敗,因此沒有數據(但其失敗不是關鍵的程序,這意味着引發異常是過度)
我曾想過只返回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
你可以嘗試在字典中傳遞返回,也許。 'return {'success':success,'origin':origin ... etc等}} – 2012-03-02 20:41:13