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