Что такое лучший идиоматический подход для перезаписи обычного lisp-последовательного кода для параллельного выполнения?Переписывание последовательного кода для параллельного выполнения
Существует несколько хороших библиотек, таких как lparallel, помогая простым случаям. Например, если у нас был какой-то каркас в длинном списке, мы можем заменить его на lparallel: mapcar, и он будет выполнять эту работу в большинстве случаев. Теперь у меня есть некоторый вызов цикла, принимая результат некоторого удаленного JSON API и nconcing его в списке:
(loop :for offset :from 0 :by 100
:for result = (get-remote-data offset)
:until (null result) :nconc result)
Как заменить его, чтобы позвонить get-remote-data
параллельно без нужды менять get-remote-data
сам? Существуют ли какие-либо стандартные и идиоматические способы? Любое хорошее чтение на эту тему также поможет. Благодарю.
Для этого конкретного случая порядок не важен, но мне нужно позвонить получить ЩИТОК-данные, пока он не возвращает пустой список (как вы можете видеть) , так как я могу это сделать с chanl? Я не знаю, сколько звонков, чтобы получить все данные. – coredump
Часть, где вы говорите, пока она не возвращает пустой список, кажется, противоречит порядку, не имеет значения. Вы также можете проверить lparallel и cl-async, у которого есть (синхронно) let – PuercoPop
@PuercoPop, я думаю, что для меня это не очень важно, в каком порядке я получу все ответы NCONC-ed. Я не думаю, что это противоречит. Спасибо, cl-async, спасибо. – coredump