2
問題來了,當我開始使用concurrent.futures
模塊這樣的對象上實現異步set和get操作:將Python期貨用於沒有結果的任務是一個好主意嗎?
import time
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=2)
class Foo(object):
def set_something(self):
def long_running_setter():
time.sleep(1.5)
print('Set something')
return executor.submit(long_running_setter)
def get_something(self):
def long_running_getter():
time.sleep(0.5)
return 'something'
return executor.submit(long_running_getter)
foo = Foo()
future = foo.get_something()
print("Got " + future.result())
但現在,設定值,並等待它變得有點彆扭使用和語義「不正確」
雖然我覺得這是仍然有效,因爲Foo
對象處於最低水平,進一步抽象可能對期貨的頂部之上。
所以,總結一下我的問題:
- 期貨是一種權利抽象的從對象的get/set值異步?特別是對於不返回任何價值的setter?
- 我是否應該爲
set_something
添加blocking
參數以擺脫result()
調用?我對這種方法有懷疑,因爲那樣我就會鼓勵不要使用期貨。 - 你會怎麼做?