2019

10

6

Pythonで自作メソッドを無限ループ実行&ランダム実行してやんよ!!!

Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

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秒の間でランダムで実行させてます。
Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

トップへ