Процесс падает при печати с использованием пула - PullRequest
0 голосов
/ 18 июня 2019

Я использую 64-битную машину Linux 18.04.2 LTS.

Функция, которая распараллелена, выполняет построение графика, а при использовании модуля savefig график сохраняется в формате PDF.

В настоящее время я выполняю 100 итераций. Как ни странно, либо 0-я, 1-я, 2-я или 3-я итерация генерирует правильный файл PDF, в то время как все другие созданные файлы PDF имеют размер 0 байтов.

На каждой итерации выдается сообщение, подобное этому:

Gdk-Message: 14: 41: 40.404: python2.7: фатальная ошибка ввода-вывода 11 (ресурс временно недоступен) на X сервере: 0.

По завершении задачи процесс останавливается, и я должен перезагрузить систему. Когда я закомментирую часть построения, код выполняет свою работу, но включение части построения приводит к приведенному выше сообщению об ошибке.

Это строки кода, которые выполняют многопроцессорность. Когда функция вызывается без этих строк, генерируется правильный файл PDF (то есть, когда код запускается последовательно)

from multiprocessing import Pool
import time
if __name__ == "__main__":
    # Step 1: Init multiprocessing.Pool()
    pool = Pool()
    results = []
    # Step 2: `pool.apply` the `mcoverpc()`
    print('START')
    start_time = int(round(time.time()))
    data = list(range(100))
    result_objects = [pool.apply_async(function, args=(num,arg1,arg2,arg3)) for num in data]
    # Step 3: Don't forget to close
    result_num = [r.get()[0] for r in result_objects]
    result_pc = [r.get()[1] for r in result_objects]
    result_fit_details = [r.get()[2] for r in result_objects]
    result_redchi = [r.get()[3] for r in result_objects] 
    pool.close()
    pool.terminate()
    print('END', int(round(time.time()))-start_time)

1 Ответ

0 голосов
/ 24 июня 2019

Я решил эту проблему, просто изменив matplotlib бэкэнд на неинтерактивный тип. В частности, я использовал PDF в качестве бэкэнда.

...