我正在使用Fibers來處理不同代碼塊之間的調度,事實證明這比試圖管理Threads要簡單得多,因為我的用例相當簡單(而且每次只涉及運行一個腳本)。 不幸的是,我需要偶爾 "殺死 "一個Fiber的能力,但Fiber中似乎沒有類似于Thread.kill的東西
。我的Fibers只是在運行一個用戶提供的模板,所以如果在其中加入大量的 "我是否被殺死了,如果是的話,我需要一直回傳到頂層",那就太麻煩了。 而且Fiber中的'exit'也只是在整個Ruby解釋器中呼叫exit。
是否有一些方法可以殺死一個纖維或者讓一個纖維完全 "退出 "它的作業?
如果沒有,(也許這是另一個問題,但它表明了我為什么要尋找 Fiber.kill)--我也在考慮使用 Threads 來基本實作 Fibers(具有額外的 "殺死 "能力),但我沒有看到任何方法來執行 thr.run 或 thr.join,以等待執行緒擊中 Thread。 因此,執行緒似乎也不能解決我的問題--除非有一個主執行緒只是啟動一個執行緒,然后坐著等執行緒完成它的作業部分,這似乎很混亂,最多就是麻煩。
uj5u.com熱心網友回復:
我很難理解yield/resume為什么不能解決你的問題--但是當纖維已經產生時,你可以使用raise Fiber#raise
def build_fibre
Fiber.new do |first|
放置'doing work'
3.times { Fiber.yield false }
放置'完成作業'。
真
rescue
放置'aborted'。
結束
end
fiber1 = build_fibre
fiber1.恢復
# Raise an exception at the `yield` call
fiber1.raise
fiber2 = build_fibre
回圈 do
放置'waiting'。
break if fiber2.recover
end
放置'finished'。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/307610.html
標籤:
