目的
負荷をかけるようなテストを実施するためのPythonツールを作りたい!(私の場合はソケット通信)
以下2種類を作成してみました。備忘録です。
- 複数のコマンドプロンプトを立ち上げ、それぞれで処理を実行するツール
- 1つのコマンドプロンプト上でマルチプロセッシングを利用して複数プロセスを実行するツール
複数プロセス起動後の処理に関しては割愛します。
Pythonはツール作成くらいでしか使わなくてあまり詳しくないので、おかしな点や改善点などあればご指摘お願いします🙏🏻
環境
Windows10
Python3.10.9
実現方法(コマンドプロンプト量産バージョン)
コマンドプロンプトを新しいウィンドウで起動する場合
test.py
import subprocess
subprocess.run("start", shell = True)
入力された個数分のコマンドプロンプトを新しいウィンドウで起動
test.py
import subprocess
str_cmd_quantity = "コマンドプロンプトの利用件数を入力してください"
index = 1
# 番号入力待ち
def numInput(choice):
while True:
print(choice)
number = input(">> ")
if number.isdecimal():
number = int(number)
return number
cmd_quantity = numInput(str_cmd_quantity)
for i in range(cmd_quantity):
# コマンドライン引数を渡して別のコマントプロンプト上で別ツール(test2.py)を実行
cmd = "start py test2.py {}".format(index)
subprocess.run(cmd, shell = True)
index += 1
ついでにコマンドプロンプトを生成した後に実行する別ツール
test2.py
import subprocess
import sys
# 受け取ったコマンドライン引数
args = sys.argv
processIndex = int(args[1])
# よしなに処理を記述
# コマンドプロンプトを閉じずに残しておく
subprocess.run("pause", shell = True)
実現方法(マルチプロセスバージョン)
test.py
from multiprocessing import Process
from re import I
# 生成するサブプロセスの数
process_quantity = 3
# サブプロセスを生成
def createSubprocess(processNum):
# サブプロセスで実行したい処理と引数を指定してサブプロセスを生成
subProcess = Process(target = subprocessAction, args = (processNum,))
subProcess.start()
# サブプロセスで実行したい処理
def subprocessAction(processNum):
# サブプロセスで実行したい処理を記述。ここはよしなに
def main():
# サブプロセスに渡したい値
process_number = 100
for process_number in range(process_quantity):
# サブプロセス生成
createSubprocess(process_number)
process_number += 1
if __name__ == '__main__':
# 実行
main()
どちらもコマンドプロンプト開いて以下コマンドで実行
$ python test.py