Я только что работал над чем-то очень похожим:
- несколько процессов (для меня пул обработки от 4 до 32 рабочих)
- каждый рабочий процесса делает некоторые вещи, которые включают получение информации
из интернета (вызов Алхимического API для меня)
- каждый процесс открывает свое собственное соединение sqlite3, все в один файл, и каждый
процесс добавляет одну запись, прежде чем получить следующую задачу из стека
Сначала я подумал, что вижу ту же проблему, что и вы, затем проследил ее до дублирующих и противоречивых проблем с получением информации из Интернета. Так как я был там, я провел некоторое тестирование пыток в sqlite и многопроцессорном режиме и обнаружил, что могу запускать МНОГИЕ рабочие процесса, все соединения и добавления в один и тот же файл sqlite без координации, и это было просто, когда я просто вводил данные теста.
Так что теперь я смотрю на вашу фразу "(выборка данных из Интернета)" - возможно, вы могли бы попробовать заменить выборку этих данных на некоторые фиктивные данные, чтобы убедиться, что это действительно соединение sqlite3, вызывающее у вас проблемы. По крайней мере, в моем тестируемом случае (запущенном прямо сейчас в другом окне) я обнаружил, что несколько процессов могут все добавлять через свои собственные соединения без проблем, но ваше описание точно соответствует проблеме, которая возникает у меня, когда два процесса сталкиваются друг с другом во время движения для веб-API (на самом деле очень странная ошибка) и иногда не получают ожидаемые данные, что, конечно, оставляет пустую ячейку в базе данных. Мое возможное решение состояло в том, чтобы обнаружить эту ошибку у каждого работника и повторить вызов веб-API, когда это произошло (могло бы быть более элегантно, но это было для личного взлома).
Приношу свои извинения, если это не относится к вашему делу, без кода трудно понять, с чем вы столкнулись, но описание заставляет задуматься, не могли бы вы расширить свои соображения.