concurrent.futures
次のようなモジュールを使用して、オブジェクトに非同期の set および get 操作を実装し始めたときに、問題が発生しました。
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.set_something().result()
Foo
オブジェクトは最下位レベルにあり、未来の上にさらに抽象化を構築できるため、まだ有効だと思います。
だから、私の問題を要約するには:
- 先物は、オブジェクトから非同期に値を取得/設定するための正しい種類の抽象化ですか? 特に値を返さないセッターの場合は?
- 呼び出しを取り除くために
blocking
パラメータを追加する必要がありますか? このアプローチには疑問があります。なぜなら、先物をまったく使用しないことをお勧めします。set_something
result()
- どのようにしますか?