блокировка файлов в R doMC

У меня есть непараллельный код, который я хотел бы распараллелить. Код должен быть смущающе распараллеливаемым, за исключением операций с файлами (запись в несколько файлов и выбор файла для записи несколько стохастический и потенциально может быть одинаковым на разных процессорах). С пакетами doMC и foreach должен ли я обрабатывать блокировку файлов или она уже обрабатывается пакетом? Я не привязан к doMC, я выбрал его, потому что я все еще буду вносить много изменений в свой код, и мне кажется, что с ним просто работать.


person blueblob    schedule 11.11.2013    source источник
comment
Если вы открываете текстовый файл в режиме append (по умолчанию, например, для write.table), несколько файлов могут записываться одновременно (на самом деле это не так, это последовательно, но обычно вы не потеряете записи, которые хотят писать одновременно). , Если у вас есть много-много заданий на многих ядрах, которые завершаются одновременно, вы можете потерять некоторые результаты (я нашел это), поэтому мне нравится записывать в отдельные файлы, а затем объединять.   -  person Simon O'Hanlon    schedule 11.11.2013
comment
Я должен был быть более ясным, я пишу объекты в файлы с помощью save, но я даже не подумал проверить help(save), чтобы увидеть, справился ли он с блокировкой. У него есть параметр safe=TRUE, который записывает во временный файл, а затем копирует исходный файл. Это все еще не совсем обеспечивает блокировку. Я добавляю к файлам, поэтому я хотел бы в псевдокоде lock(file);load(file);process();save(file);unlock(file)   -  person blueblob    schedule 11.11.2013


Ответы (1)


Я не нашел решения общей проблемы. Кажется, есть решение:

Есть ли способ разделить блокировку (например, файл блокировки) между процессами R?

и это можно считать дубликатом этого.

person blueblob    schedule 21.11.2013