我有兩個任務成對調用。它們是單獨的任務,因爲它們與單獨的阻塞I/O資源對話,並且其中一個(TaskA)提前退出,條件是任務對的先前實例仍在運行,而TaskB仍將運行(即,TaskA關心重疊任務對,TaskB不)。協調兩個芹菜任務
現在我期待在使用緩存的令牌按菜譜爲例,執行所設定的規則
def TaskA()
take TaskA token
exit if already taken
check if TaskB token is taken
exit if TaskB token is taken
continue working
def TaskB()
take TaskB token
if token taken exit
do task
這個問題是一對TASKA和TaskB的範圍內,如果TaskB首先啓動,TASKA會錯誤地退出。如果我可以強制執行TaskA將始終首先啓動,那麼也許這是一個好方法。
否則: 我的想法是在調用函數中生成一個rand()或timestamp,並將它傳遞給兩個任務實例。 TaskB實例會將它附加到它所需的令牌上,如果Rand部分與自己匹配,則TaskA將使用它來忽略TaskB令牌,如果令牌已被佔用,則會退出,但rand部分不匹配。
def TaskA(rand)
take TaskA token
exit if already taken
check if TaskB_* token is taken
exit if TaskB_not_rand token is taken
continue working
def TaskB(rand)
check TaskB_* token
if TaskB_* token taken exit
take TaskB_rand token
do task
考慮佈局問題,是我的第二個版本(與蘭特()附加)以正確的方式提出的方式,使用令牌來獲得任務協調?或者有更簡單的方法。
如果問題不清楚,或者你的思維充滿好奇心,爲什麼任務有這個操作標準,我可以添加更多信息。
我將無法使用memcached的,如果我想搜索緩存的令牌前綴。 – michael