У меня была та же проблема, и я решил ее следующим образом:
const fetch = (url) => {
return node-fetch(url)
.then(result => result.json())
.catch((e) => {
return new Promise((resolve) => setTimeout(() => resolve(fetch(url)), timeout));
});
};
tasks = [fetch(url1), fetch(url2) ....];
Promise.all(tasks).then(......)
В этом случае Promise.all
будет ожидать, что каждое обещание войдет в состояние resolved
или rejected
.
И имея это решение, мы «останавливаем catch
исполнение» неблокирующим способом. Фактически, мы ничего не останавливаем, мы просто возвращаем Promise
в состояние ожидания, которое возвращает другой Promise
, когда оно разрешено после таймаута.
Совместное использование файлов на целых узлах / машинах - это не то, что Docker решит для вас напрямую, но вы можете взглянуть на драйверы хранилища Docker в контексте общих систем хранения . Это помогает интегрироваться с такими решениями, как NFS, ZFS и т. Д.
Однако вы упомянули, что вы используете SQLite и Flask, используя драйвер SQLAlchemy. Чтобы избавить вас от головной боли, вместо того, чтобы пытаться разделить файловую систему между вашими тремя узлами, вы должны использовать сервер базы данных, такой как MySQL , MariaDB или PostgreSQL [114 ] (чтобы назвать несколько), все это хорошо работает с SQLAlchemy. Таким образом, вместо того, чтобы пытаться использовать один и тот же файл SQLite для всех запущенных экземпляров вашего приложения Flask (которое будет блокировать / ухудшать очень часто / быстро), вы можете подключить все свои контейнеры Flask к одному и тому же контейнеру базы данных.
Эту дополнительную базу данных можно легко запустить в контейнере, а также управлять с помощью docker-compose
. Таким образом, только один узел нуждается в доступе к файловой системе для хранения данных для базы данных.