簡體   English   中英

將Python期貨用於沒有結果的任務是一個好主意嗎?

[英]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_xobj.set_x )更obj.get_x obj.set_x 由於屬性會偽裝成常規屬性,因此由屬性觸發異步代碼是不好的樣式。

許多人發現面向對象使他們陷入異步代碼的麻煩,他們更喜歡使用功能更多的樣式。 幸運的是,Python支持使用任何一種編程范例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM