Наиболее очевидная проблема заключается в том, что pages_done
является синхронизированным объектом Manager.list (так что каждый процесс может получить к нему атомарный доступ), но хотя pages
запускается как один из них, он быстро становится обычным) обработанный список:
pages_done += pages
pages = []
Вторая строка в кавычках связывает pages
с новым, пустым обычным списком.
Даже если вы удалили все элементы pages
во второй строке(вместо того, чтобы выполнять повторное назначение), вы можете столкнуться с гонкой, в которой (например) pages
содержали A, B и C, когда вы выполнили +=
в первой строке, но стали A, B,C и D. на секунду.
Быстрым решением было бы снимать предметы с pages
по одному и помещать их в pages_done
по одному (не очень эффективно).Может быть, лучше, чтобы эти структуры данных вообще не были общими;в кавычном коде это не выглядит так, как должно быть (я предполагаю, что от него зависит какой-то не заключенный в кавычки код, поскольку в противном случае повторное связывание pages
в любом случае является красной сельдью!).