# https://docs.python.org/ja/3/library/concurrent.futures.html?highlight=processpoolexecutor
# https://qiita.com/__init__/items/91e5841ed53d55a7895e
import concurrent.futures
import logging
# import math
import math
import os
import time
from logging import getLogger, StreamHandler, FileHandler, Formatter
PRIMES = [
0,
10000,
1,
20000,
30000,
2,
40000,
50000,
60000,
3,
4,
5,
6,
]
def mkLogger(type, n):
# 1.loggerの設定
# loggerオブジェクトの宣言
logger = getLogger(type)
# loggerのログレベル設定(ハンドラに渡すエラーメッセージのレベル)
logger.setLevel(logging.DEBUG)
# 2.handlerの設定
# ログ出力フォーマット設定
handler_format = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 2-1.標準出力のhandler
# handlerの生成
stream_handler = StreamHandler()
# handlerのログレベル設定(ハンドラが出力するエラーメッセージのレベル)
stream_handler.setLevel(logging.DEBUG)
# ログ出力フォーマット設定
stream_handler.setFormatter(handler_format)
# 2-2.テキスト出力のhandler
# handlerの生成
file_handler = FileHandler('Ex13ProcessPoolExecutor.' + type + '.log', 'a')
# handlerのログレベル設定(ハンドラが出力するエラーメッセージのレベル)
file_handler.setLevel(logging.DEBUG)
# ログ出力フォーマット設定
file_handler.setFormatter(handler_format)
# 3.loggerにhandlerをセット
# 標準出力のhandlerをセット
logger.addHandler(stream_handler)
# テキスト出力のhandlerをセット
logger.addHandler(file_handler)
return logger
def is_prime(n):
print("# %s %s %s\n" % (str(os.getpid()), str(n), "start"))
logger = mkLogger(str(n), n)
logger.debug(str(os.getpid()) + " " + str(n) + " Start Hello World!")
print("# %s %s %s\n" % (str(os.getpid()), str(n), "logger.debug"))
# sqrt_n = int(math.floor(math.sqrt(n))) * 1
print("# %s %s %s\n" % (str(os.getpid()), str(n), "exec " + str(n)))
# time.sleep(n)
for i in range(0, n, 1):
None
logger.debug(str(os.getpid()) + " " + str(n) + " Hello World! " + str(i))
print("# %s %s %s\n" % (str(os.getpid()), str(n), "end"))
logger.debug(str(os.getpid()) + " " + str(n) + " End Hello World!")
return [[True, os.getpid()]]
def main():
logger = mkLogger("Main", 999)
logger.debug(str(os.getpid()) + " " + "Main" + " Hello World!")
for n in PRIMES:
# print("#n=", n, nlf[str(n)])
lf = "Ex13ProcessPoolExecutorA." + str(n) + ".log"
with concurrent.futures.ProcessPoolExecutor(max_workers=15) as executor:
for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
print('%d is prime: %s' % (number, prime))
logger.debug('%d is prime: %s' % (number, prime))
if __name__ == '__main__':
main()