Last active
April 21, 2022 11:57
-
-
Save suganoo/2cddeae679edbbaf5f3b319338b30976 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"log" | |
"os" | |
"time" | |
"golang.org/x/time/rate" | |
) | |
func main() { | |
log.SetOutput(os.Stdout) | |
log.SetFlags(log.Lmicroseconds) | |
// 1秒間に実行する回数 | |
ntimes := 5 | |
n := rate.Every(time.Second / time.Duration(ntimes)) | |
// バッファーは1 | |
limiter := rate.NewLimiter(n, 1) | |
ctx := context.Background() | |
log.Println("--- Start ---") | |
for i := 0; i < 20 ; i ++ { | |
if err := limiter.Wait(ctx); err != nil { | |
log.Fatalln(err) | |
} | |
log.Printf("Do work %02d", i+1) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17:29:32.839459 --- Start --- | |
17:29:32.839559 Do work 01 | |
17:29:33.039795 Do work 02 | |
17:29:33.239790 Do work 03 | |
17:29:33.439756 Do work 04 | |
17:29:33.639779 Do work 05 | |
17:29:33.839807 Do work 06 | |
17:29:34.039784 Do work 07 | |
17:29:34.239764 Do work 08 | |
17:29:34.439718 Do work 09 | |
17:29:34.639772 Do work 10 | |
17:29:34.839776 Do work 11 | |
17:29:35.039786 Do work 12 | |
17:29:35.239792 Do work 13 | |
17:29:35.439847 Do work 14 | |
17:29:35.639805 Do work 15 | |
17:29:35.839770 Do work 16 | |
17:29:36.039750 Do work 17 | |
17:29:36.239730 Do work 18 | |
17:29:36.439778 Do work 19 | |
17:29:36.639786 Do work 20 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"log" | |
"os" | |
"time" | |
"golang.org/x/time/rate" | |
) | |
func main() { | |
log.SetOutput(os.Stdout) | |
log.SetFlags(log.Lmicroseconds) | |
// 1秒間に実行する回数 | |
ntimes := 5 | |
n := rate.Every(time.Second / time.Duration(ntimes)) | |
// バッファーを10にする | |
limiter := rate.NewLimiter(n, 10) | |
ctx := context.Background() | |
log.Println("--- Start ---") | |
for i := 0; i < 20 ; i ++ { | |
if err := limiter.Wait(ctx); err != nil { | |
log.Fatalln(err) | |
} | |
log.Printf("Do work %02d", i+1) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17:31:15.981971 --- Start --- | |
17:31:15.982024 Do work 01 | |
17:31:15.982027 Do work 02 | |
17:31:15.982029 Do work 03 | |
17:31:15.982031 Do work 04 | |
17:31:15.982033 Do work 05 | |
17:31:15.982035 Do work 06 | |
17:31:15.982036 Do work 07 | |
17:31:15.982038 Do work 08 | |
17:31:15.982040 Do work 09 | |
17:31:15.982042 Do work 10 | |
17:31:16.182243 Do work 11 | |
17:31:16.382219 Do work 12 | |
17:31:16.582234 Do work 13 | |
17:31:16.782242 Do work 14 | |
17:31:16.982248 Do work 15 | |
17:31:17.182247 Do work 16 | |
17:31:17.382214 Do work 17 | |
17:31:17.582262 Do work 18 | |
17:31:17.782244 Do work 19 | |
17:31:17.982247 Do work 20 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"log" | |
"os" | |
"golang.org/x/time/rate" | |
) | |
func main() { | |
log.SetOutput(os.Stdout) | |
log.SetFlags(log.Lmicroseconds) | |
// Limit を rate.Limit(n) にすると1秒間にn回 | |
limiter := rate.NewLimiter(rate.Limit(1), 1) | |
ctx := context.Background() | |
log.Println("--- Start ---") | |
for i := 0; i < 20 ; i ++ { | |
if err := limiter.Wait(ctx); err != nil { | |
log.Fatalln(err) | |
} | |
log.Printf("Do work %02d", i+1) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17:43:46.807694 --- Start --- | |
17:43:46.807780 Do work 01 | |
17:43:47.808017 Do work 02 | |
17:43:48.808015 Do work 03 | |
17:43:49.807991 Do work 04 | |
17:43:50.807969 Do work 05 | |
17:43:51.807975 Do work 06 | |
17:43:52.807996 Do work 07 | |
17:43:53.807986 Do work 08 | |
17:43:54.808001 Do work 09 | |
17:43:55.807990 Do work 10 | |
17:43:56.808000 Do work 11 | |
17:43:57.808031 Do work 12 | |
17:43:58.808018 Do work 13 | |
17:43:59.808008 Do work 14 | |
17:44:00.808003 Do work 15 | |
17:44:01.807958 Do work 16 | |
17:44:02.807953 Do work 17 | |
17:44:03.807984 Do work 18 | |
17:44:04.807985 Do work 19 | |
17:44:05.807995 Do work 20 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"log" | |
"os" | |
"time" | |
"golang.org/x/time/rate" | |
) | |
func main() { | |
log.SetOutput(os.Stdout) | |
log.SetFlags(log.Lmicroseconds) | |
// 1秒間に実行する回数 | |
ntimes := 5 | |
n := rate.Every(time.Second / time.Duration(ntimes)) | |
limiter := rate.NewLimiter(n, 10) | |
ctx := context.Background() | |
log.Println("--- Start ---") | |
for i := 0; i < 20 ; i ++ { | |
// 1秒間に5コトークンが溜まるが、5トークン溜まったごとに1回実行 | |
// →すなわち1秒に一回実行になる | |
if err := limiter.WaitN(ctx, 5); err != nil { | |
log.Fatalln(err) | |
} | |
log.Printf("Do work %02d", i+1) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17:55:20.033969 --- Start --- | |
17:55:20.034020 Do work 01 | |
17:55:20.034023 Do work 02 | |
17:55:21.034249 Do work 03 | |
17:55:22.034229 Do work 04 | |
17:55:23.034255 Do work 05 | |
17:55:24.034258 Do work 06 | |
17:55:25.034214 Do work 07 | |
17:55:26.034269 Do work 08 | |
17:55:27.034190 Do work 09 | |
17:55:28.034225 Do work 10 | |
17:55:29.034215 Do work 11 | |
17:55:30.034232 Do work 12 | |
17:55:31.034231 Do work 13 | |
17:55:32.034242 Do work 14 | |
17:55:33.034237 Do work 15 | |
17:55:34.034243 Do work 16 | |
17:55:35.034243 Do work 17 | |
17:55:36.034278 Do work 18 | |
17:55:37.034257 Do work 19 | |
17:55:38.034246 Do work 20 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"log" | |
"os" | |
"time" | |
"golang.org/x/time/rate" | |
) | |
func main() { | |
log.SetOutput(os.Stdout) | |
log.SetFlags(log.Lmicroseconds) | |
// 1秒間に実行する回数 | |
ntimes := 5 | |
n := rate.Every(time.Second / time.Duration(ntimes)) | |
limiter := rate.NewLimiter(n, 1) | |
ctx := context.Background() | |
log.Println("--- Start ---") | |
for i := 0; i < 20 ; i ++ { | |
if err := limiter.Wait(ctx); err != nil { | |
log.Fatalln(err) | |
} | |
// 10回目から1秒間に2回実行に変更する | |
if (i + 1) == 10 { | |
limiter.SetLimit(rate.Every(time.Second / time.Duration(2))) | |
} | |
log.Printf("Do work %02d", i+1) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18:04:21.237587 --- Start --- | |
18:04:21.237637 Do work 01 | |
18:04:21.437903 Do work 02 | |
18:04:21.637820 Do work 03 | |
18:04:21.837844 Do work 04 | |
18:04:22.037846 Do work 05 | |
18:04:22.237880 Do work 06 | |
18:04:22.437871 Do work 07 | |
18:04:22.637830 Do work 08 | |
18:04:22.837845 Do work 09 | |
18:04:23.037851 Do work 10 | |
18:04:23.537504 Do work 11 | |
18:04:24.037544 Do work 12 | |
18:04:24.537508 Do work 13 | |
18:04:25.037518 Do work 14 | |
18:04:25.537554 Do work 15 | |
18:04:26.037556 Do work 16 | |
18:04:26.537548 Do work 17 | |
18:04:27.037534 Do work 18 | |
18:04:27.537534 Do work 19 | |
18:04:28.037544 Do work 20 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"log" | |
"os" | |
"time" | |
"golang.org/x/time/rate" | |
) | |
func main() { | |
log.SetOutput(os.Stdout) | |
log.SetFlags(log.Lmicroseconds) | |
// 1秒間に実行する回数 | |
ntimes := 5 | |
n := rate.Every(time.Second / time.Duration(ntimes)) | |
limiter := rate.NewLimiter(n, 1) | |
ctx := context.Background() | |
var rsv *rate.Reservation | |
log.Println("--- Start ---") | |
for i := 0; i < 20 ; i ++ { | |
if err := limiter.Wait(ctx); err != nil { | |
log.Fatalln(err) | |
} | |
log.Printf("Do work %02d", i+1) | |
if (i + 1) == 10 { | |
rsv = limiter.Reserve() | |
} | |
if rsv != nil { | |
log.Printf(rsv.Delay().String()) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18:52:56.763809 --- Start --- | |
18:52:56.763858 Do work 01 | |
18:52:56.964062 Do work 02 | |
18:52:57.164063 Do work 03 | |
18:52:57.364088 Do work 04 | |
18:52:57.564032 Do work 05 | |
18:52:57.764060 Do work 06 | |
18:52:57.964093 Do work 07 | |
18:52:58.164063 Do work 08 | |
18:52:58.364081 Do work 09 | |
18:52:58.564029 Do work 10 | |
18:52:58.564063 199.79173ms | |
18:52:58.964117 Do work 11 | |
18:52:58.964133 0s | |
18:52:59.164076 Do work 12 | |
18:52:59.164093 0s | |
18:52:59.364049 Do work 13 | |
18:52:59.364077 0s | |
18:52:59.564050 Do work 14 | |
18:52:59.564068 0s | |
18:52:59.764130 Do work 15 | |
18:52:59.764148 0s | |
18:52:59.964103 Do work 16 | |
18:52:59.964120 0s | |
18:53:00.164049 Do work 17 | |
18:53:00.164077 0s | |
18:53:00.364126 Do work 18 | |
18:53:00.364142 0s | |
18:53:00.564072 Do work 19 | |
18:53:00.564089 0s | |
18:53:00.764112 Do work 20 | |
18:53:00.764131 0s |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"log" | |
"os" | |
"time" | |
"golang.org/x/time/rate" | |
) | |
func main() { | |
log.SetOutput(os.Stdout) | |
log.SetFlags(log.Lmicroseconds) | |
// 1秒間に実行する回数 | |
ntimes := 5 | |
n := rate.Every(time.Second / time.Duration(ntimes)) | |
limiter := rate.NewLimiter(n, 1) | |
ctx := context.Background() | |
log.Println("--- Start ---") | |
for i := 0; i < 20 ; i ++ { | |
if err := limiter.Wait(ctx); err != nil { | |
log.Fatalln(err) | |
} | |
log.Printf("Do work %02d", i+1) | |
if 10 <= (i + 1) { | |
time.Sleep(200 * time.Millisecond) | |
} | |
if limiter.Allow() { | |
log.Println("Allow() true") | |
} else { | |
log.Println("Allow() false") | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19:01:50.117299 --- Start --- | |
19:01:50.117350 Do work 01 | |
19:01:50.117353 Allow() false | |
19:01:50.317610 Do work 02 | |
19:01:50.317629 Allow() false | |
19:01:50.517559 Do work 03 | |
19:01:50.517576 Allow() false | |
19:01:50.717573 Do work 04 | |
19:01:50.717592 Allow() false | |
19:01:50.917506 Do work 05 | |
19:01:50.917524 Allow() false | |
19:01:51.117570 Do work 06 | |
19:01:51.117588 Allow() false | |
19:01:51.317564 Do work 07 | |
19:01:51.317586 Allow() false | |
19:01:51.517576 Do work 08 | |
19:01:51.517595 Allow() false | |
19:01:51.717560 Do work 09 | |
19:01:51.717578 Allow() false | |
19:01:51.917548 Do work 10 | |
19:01:52.117767 Allow() true | |
19:01:52.317993 Do work 11 | |
19:01:52.518254 Allow() true | |
19:01:52.718454 Do work 12 | |
19:01:52.918698 Allow() true | |
19:01:53.118913 Do work 13 | |
19:01:53.319110 Allow() true | |
19:01:53.519305 Do work 14 | |
19:01:53.719535 Allow() true | |
19:01:53.919728 Do work 15 | |
19:01:54.119973 Allow() true | |
19:01:54.320157 Do work 16 | |
19:01:54.520363 Allow() true | |
19:01:54.720583 Do work 17 | |
19:01:54.920774 Allow() true | |
19:01:55.120989 Do work 18 | |
19:01:55.321212 Allow() true | |
19:01:55.521434 Do work 19 | |
19:01:55.721667 Allow() true | |
19:01:55.921878 Do work 20 | |
19:01:56.122113 Allow() true |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment