Многопоточность - запись в файл для каждого потока Python3 - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть сценарий 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. Я провел некоторые исследования, и большинство вещей указывают на необходимость отдельного потока для записи в файл, в который другие хотят записать. Тем не менее, все эти примеры, которые я нахожу, предназначены для записи нескольких потоков в один файл. Я, однако, хочу один файл на поток.

Есть ли способ обойти эту проблему или мне нужен поток для записи в каждый отдельный файл?

1 Ответ

0 голосов
/ 26 апреля 2020

Обнаружил, в чем заключалась моя проблема. В этой строке:

with open(CONFIG_DIR + proc_name + "-time.log", "w+") as log_file:

CONFIG_DIR не заканчивается на forward sla sh ("/"), и поэтому файлы БЫЛИ создавались, просто в родительском каталоге и с именем, которое я не ожидал , это было простое исправление:

with open(CONFIG_DIR + "/" + proc_name + "-time.log", "w+") as log_file:

Мораль истории: проверьте пути к файлам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...