У меня есть сценарий Python 3, который имеет следующий код:
from subprocess import check_output, Popen, CalledProcessError
from os import getenv, mkdir, path
from time import sleep, time
from threading import Thread
def pgrep(proc_name):
try:
check_output(["pgrep", proc_name])
return True
except CalledProcessError:
return False
def watch_dog(proc_name, polling_rate, CONFIG_DIR):
print("Thread " + proc_name + " Started")
start_time = 0
end_time = 0
total_time = 0
while True:
if (pgrep(proc_name) and (start_time == 0)):
start_time = time()
print("TIMING " + proc_name)
elif ((not pgrep(proc_name)) and (start_time != 0)):
end_time = time()
total_time = str(end_time - start_time)
print("Done timing " + proc_name)
print("TIME: " + total_time)
try:
with open(CONFIG_DIR + proc_name + "-time.log", "w+") as log_file:
log_file.write(total_time)
log_file.write("\n")
log_file.flush()
except:
print("CANNOT WRITE TO FILE")
start_time = 0
end_time = 0
total_time = 0
sleep(polling_rate)
for each in processes:
globals()[each] = Thread(target=watch_dog, args=(each, polling_rate, CONFIG_DIR,))
globals()[each].start()
Все работает отлично, за исключением того, что я не могу записывать файлы в функцию watch_dog
. Я провел некоторые исследования, и большинство вещей указывают на необходимость отдельного потока для записи в файл, в который другие хотят записать. Тем не менее, все эти примеры, которые я нахожу, предназначены для записи нескольких потоков в один файл. Я, однако, хочу один файл на поток.
Есть ли способ обойти эту проблему или мне нужен поток для записи в каждый отдельный файл?