项目作者: korovkin

项目描述 :
go lang concurrency limiter.
高级语言: Go
项目地址: git://github.com/korovkin/limiter.git
创建时间: 2017-05-13T17:15:41Z
项目社区:https://github.com/korovkin/limiter

开源协议:

下载


go lang goroutine concurrency limiter

builds

Build Status

Example

limit the number of concurrent go routines to 10:

  1. import "github.com/korovkin/limiter"
  2. ...
  3. limit := limiter.NewConcurrencyLimiter(10)
  4. defer limit.WaitAndClose()
  5. for i := 0; i < 1000; i++ {
  6. limit.Execute(func() {
  7. // do some work
  8. })
  9. }

Real World Example:

  1. import "github.com/korovkin/limiter"
  2. ...
  3. limiter := limiter.NewConcurrencyLimiter(10)
  4. httpGoogle := int(0)
  5. limiter.Execute(func() {
  6. resp, err := http.Get("https://www.google.com/")
  7. Expect(err).To(BeNil())
  8. defer resp.Body.Close()
  9. httpGoogle = resp.StatusCode
  10. })
  11. httpApple := int(0)
  12. limiter.Execute(func() {
  13. resp, err := http.Get("https://www.apple.com/")
  14. Expect(err).To(BeNil())
  15. defer resp.Body.Close()
  16. httpApple = resp.StatusCode
  17. })
  18. limiter.WaitAndClose()
  19. log.Println("httpGoogle:", httpGoogle)
  20. log.Println("httpApple:", httpApple)

Concurrent IO with Error tracking:

  1. import "github.com/korovkin/limiter"
  2. ...
  3. a := errors.New("error a")
  4. b := errors.New("error b")
  5. concurrently := limiter.NewConcurrencyLimiterForIO(limiter.DefaultConcurrencyLimitIO)
  6. concurrently.Execute(func() {
  7. // Do some really slow IO ...
  8. // keep the error:
  9. concurrently.FirstErrorStore(a)
  10. })
  11. concurrently.Execute(func() {
  12. // Do some really slow IO ...
  13. // keep the error:
  14. concurrently.FirstErrorStore(b)
  15. })
  16. concurrently.WaitAndClose()
  17. firstErr := concurrently.FirstErrorGet()
  18. Expect(firstErr == a || firstErr == b).To(BeTrue())