Процесс не может получить доступ к файлу, потому что он используется другим процессом в python

 def worker(ip, started_date, full_path):


    planner_file = full_path+"\\"+"export_"+str(ip)+".txt"

    print "planner file", planner_file

    arg_list = []
    action ="MakeExport"
    arg_list.append(upnp_path)
    arg_lista.append(action)
    arg_list.append(' ip=')
    arg_list.append(ip)
    arg_list.append(" 2>NULL")


    command = ['python', arg_list]

    p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)

    output = p.stdout.read()

   with open(planner_file, "a") as pf:
       pf.write(output)




if __name__=='__main__':

    rack_number, started_date, full_path, ips = main()

    pid = os.getpid()

   print('Main Process is started and PID is: ' + str(pid))

   process_list = []

   for ip in ips:
        p = Process(target=worker, args=(ip, started_date, full_path))
        p.start()
        child_pid = str(p.pid)
        print('PID is:' + child_pid)
        process_list.append(child_pid)

   children = multiprocessing.active_children()

   # print process_list

  while children != []:
     time.sleep(1)
     children = multiprocessing.active_children()

Я пытаюсь экспортировать некоторые данные IP-адресов в файлы txt. Хотя он работает нормально с одним IP-адресом, если я попробую свой скрипт для нескольких IP-адресов, я получу следующую ошибку во всех других текстовых файлах ip.

Для первого ip-адреса скрипт корректно экспортирует данные. Для всех остальных оставшихся ips он говорит;

"Процесс не может получить доступ к файлу, поскольку он используется другим процессом".

Например: export_1.8.5.20.txt (первые данные ip экспортированы правильно) export_1.8.5.21.txt (говорит, что процесс не может получить доступ к файлу)

Я не получаю никаких ошибок от моего скрипта. Просто получите указанные выше данные в txt-файлах.

Любая помощь будет оценена по достоинству. Спасибо


person pylearner    schedule 15.05.2017    source источник
comment
... не записывайте в один и тот же файл, используя несколько процессов.   -  person Maurice Meyer    schedule 15.05.2017
comment
Можете ли вы опубликовать свой код с правильным отступом? Очень трудно понять, как это представлено в настоящее время. И где у вас сообщается об ошибке, при звонке Popen() или при звонке open()? Другими словами, можем ли мы увидеть трассировку стека вашей ошибки?   -  person BoarGules    schedule 15.05.2017
comment
Привет @BoarGules. Спасибо за вашу помощь. Вопрос обновлен.   -  person pylearner    schedule 15.05.2017


Ответы (1)


Кажется, это известная ошибка: https://bugs.python.org/issue33369 или https://bugs.python.org/issue19575

Попробуйте заблокировать вызов Popen().

person Zoltán Kolonits    schedule 29.05.2020