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()
调用吗?我对这种方法持怀疑态度,因为那样我会鼓励根本不要使用期货。 - 你会怎么做?