Я использую 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)