Pythonで自作メソッドを無限ループ実行&ランダム実行してやんよ!!!
PythonでWEBアプリの簡単な動作テストや強化学習開発などの場面で、自作メソッドをあえて無限ループで実行させて処理の経過を検証したり、複数のメソッドをランダムなタイミングで実行させたいみたいな事あるんじゃないかと思います。
無限ループ処理を実装する
import random
import threading
# 指定メソッドと繰り返す時間をスレッド実行
def setInterval(func, interval):
e = threading.Event()
while not e.wait(interval):
func()
# 1〜100の間でランダムに選ばれた数字を表示
def randomNumber():
print(random.uniform(1, 100))
# 10秒ごとにrandomNumberを実行
setInterval(randomNumber, 10)
かなりシンプルですが、これで10秒おきに1〜100の間でランダムに選ばれた数字が表示されます
複数のメソッドをランダムで実行する
import random
import threading
def funcA():
print("メソッドAだお")
def funcB():
print("メソッドBだお")
def funcC():
print("メソッドCだお")
def funcD():
print("メソッドDだお")
# 指定メソッドと繰り返す時間をスレッド実行
def setInterval(funclist, interval):
e = threading.Event()
while not e.wait(interval):
random.choice(funclist)()
# メソッドをリスト化
funclist = [funcA, funcB, funcC, funcD]
# 10秒ごとにfunclistのメソッドをランダム実行
setInterval(funclist, 10)
これで
funclistに格納したメソッドが10秒おきにランダムに実行されます
ランダムだけど各メソッドの確率も操作
import random
import threading
import numpy as np
def funcA():
print("メソッドAだお")
def funcB():
print("メソッドBだお")
def funcC():
print("メソッドCだお")
def funcD():
print("メソッドDだお")
# 指定メソッドをスレッド実行(時間も10〜30秒の間でランダム)
def setInterval(funclist):
e = threading.Event()
while not e.wait(random.uniform(10, 30)):
np.random.choice(funclist, p=[0.9, 0.045, 0.045, 0.01])()
# メソッドをリスト化
funclist = [funcA, funcB, funcC, funcD]
# funclistのメソッドをランダム実行
setInterval(funclist)
各メソッドの発生確率も操作したい場合は
numpyを使えばめちゃ簡単にできます
funcAを90%、funcBとfuncCを4.5%、funcDを1%の確率で設定
おまけに実行させるインターバルも10〜30秒の間でランダムで実行させてます。