[英]Is it a good idea to use Python futures for tasks without results?
當我開始使用concurrent.futures
模塊對對象執行異步設置和獲取操作時,就會出現問題:
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
對象處於最低級別,並且可以在期貨之上構建進一步的抽象。
因此,總結一下我的問題:
set_something
中添加一個blocking
參數以擺脫result()
調用? 我對這種方法有疑問,因為那樣的話我會鼓勵不要使用期貨。 如果必須先完成操作,然后才能繼續執行代碼中的特定點,則需要某種方式來阻止/加入/等待。
Python 屬性比Java樣式的getter和setter(例如obj.get_x
和obj.set_x
)更obj.get_x
obj.set_x
。 由於屬性會偽裝成常規屬性,因此由屬性觸發異步代碼是不好的樣式。
許多人發現面向對象使他們陷入異步代碼的麻煩,他們更喜歡使用功能更多的樣式。 幸運的是,Python支持使用任何一種編程范例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.