Ruby-async_fu、スレッドの使いやすさ

私はそれほど前にルビーを使っていませんでしたが、ほぼ初期の頃には、メインプログラムの動作を妨げない長時間の機能を実行する必要がありました。



既製のシンプルなソリューションが見つからなかったため、車輪の再発明を始めました。



現時点では、ライブラリでは次のことができます。





使用例:

Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  1. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  2. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  3. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  4. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  5. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  6. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  7. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  8. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  9. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  10. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello



  11. Copy Source | Copy HTML class YourClass1 def hello p 'start' p 'list ' + Thread .list.join( ' ' ) p 'main ' + Thread .main.to_s p 'this ' + Thread .current.to_s p 'end' end end af = AsyncFu. new ( YourClass1 .new) af. hello





Copy Source | Copy HTML



  1. クラス YourClass2 <AsyncFu
  2. デフ こんにちは
  3. p 「開始」
  4. p 'list' + Thread .list.join( ''
  5. p 'main' + スレッド .main.to_s
  6. p 'this' + Thread .current.to_s
  7. p 「終了」
  8. 終わり
  9. 終わり
  10. ai = YourClass2 .new
  11. こんにちは


ここでそれを感じることができます: GitHub



藤堂





PS第一人者の話を聞くのが面白い:)



UPD

上記の例は使用方法ではありません。これはスレッドチェックであり、古いテストの一部です。

実際、これを行うことができます:



Copy Source | Copy HTML



  1. 「rubygems」が 必要
  2. 「async_fu」が 必要
  3. クラス
  4. def grep (クエリ、パス)
  5. list = ` grep -rne '#{query}' #{path}`
  6. ファイル new'/tmp/grep.log''w' ).writeリスト
  7. 終わり
  8. def tick
  9. ループ {
  10. 寝る 1
  11. p 「チェック」
  12. }
  13. 終わり
  14. デフタック
  15. ループ {
  16. 寝る 2
  17. p 「タック」
  18. }
  19. 終わり
  20. 終わり
  21. テスト= AsyncFu。 newいくつかの .new)
  22. テスト。 ダニ
  23. テスト。 grep'thread.rb''/ usr / local / lib'
  24. テスト。 タック



All Articles