Я использовал образец кода , чтобы создать параллельную очередь заданий GNU, как показано ниже
// create a job queue file
touch jobqueue
//start the job queue
tail -f jobqueue | parallel -u php worker.php
// in another shell, add the data
while read LINE; do echo $LINE >> jobqueue; done < input_data_file.txt
Этот подход работает и обрабатывает задание как простую очередь заданий.Но есть две проблемы:
1 - чтение данных из входного файла, а затем запись его в очередь заданий (другой файл) выполняется медленно, так как требует дискового ввода-вывода.
2 - если по какой-то причине моя работа прерывается в середине, и я перезапускаю параллельную обработку, она перезапустит все задания в файле очереди заданий
Я могу добавить скрипт вworker.php для фактического удаления строки из очереди заданий, когда работа выполнена, но я чувствую, что есть лучший способ сделать это.
Возможно ли, что вместо
tail -f jobqueue
IМожно использовать именованный канал в качестве входных данных для параллельной, и моя текущая настройка все еще может работать как простая очередь?
Полагаю, таким образом мне не нужно будет удалять строки из канала, что будет сделано автоматически.удалены на чтение?
PS Я знаю, и я использовал RabbitMQ, ZeroMQ (и мне это нравится), nng, nanomsg и даже php pcntl_fork, а также pthreads.Так что вопрос не в том, что там для параллельной обработки.Больше о том, чтобы создать рабочую очередь с gnu параллельно.