Не удалось записать в файл из процесса, но смог получить доступ к объекту файла с помощью модуля Multiprocessing - PullRequest
0 голосов
/ 06 июля 2018

Я использовал многопроцессорный модуль и создал процесс, в котором я хочу получить доступ к файлу и мне нужно записать в него несколько журналов. У меня есть особая зависимость, поэтому я объявил файл вне рабочей функции, и из обработанной функции я могу распечатать и получить доступ к объекту файла, но не смог ничего записать в него.

Не могли бы вы подсказать, как мне записать в этот файл.

import multiprocessing
import time

file1 = open("files.txt",'w+')

def worker():
    print "iam called"
    print file1
    file1.write("hello 123")


jobs = []
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
time.sleep(10)
p.terminate()

выход:

iam called
<open file 'files.txt', mode 'w+' at 0x7f5ee8bd7f60>

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Рекомендуется открывать файлы с помощью with, который явно закроет файл после того, как вы поработали с ним;

with open('files.txt', 'w+') as file1:
    #Perform actions here
0 голосов
/ 06 июля 2018

Неясно, чего именно вы здесь добиваетесь. Согласно вашему коду, file1 будет объектом FileStream. Вы разделяете этот единственный поток в нескольких адресных пространствах вашего процесса. Это первый недостаток.

Когда ваша функция пытается выполнить мультиобработанную функцию, поток файлов не становится общим. Более того, ссылка на file1 FileStream НЕ уничтожена, и, следовательно, вы можете получить доступ к файлу, но не можете писать в него. Кроме того, почему вы открываете в режиме 'W +'? Есть ли какая-либо явная причина для усечения файла?

Чтобы решить эту проблему, вы должны открыть поток файлов внутри функции, выполняющей порождение процессов:

def worker():
    print "iam called"
    with open(files.txt",'w+'):
        file1.write("hello 123")
0 голосов
/ 06 июля 2018

Вам нужно закрыть файл, как только вы добавите в него некоторые данные. Есть:

file1.write("hello 123")
file1.close()
...