С Queue
вы гарантированно гарантируете многопоточность в любой реализации и версии Python. Полагаясь на тот или иной метод того, чтобы какой-то другой объект был «атомарным» (в данной реализации и версии), вы обычно оставляете вас в покое на этой «атомарности», которая не является сильной гарантией (просто артефакт реализации для конкретной конкретной версии и т используется) и, следовательно, тонкие, ОЧЕНЬ трудные для отладки условия гонки, вводимые при любом обновлении или переносе в другие реализации Python.
Если ваше профилирование говорит вам, что строгие и общие гарантии Queue
являются узким местом для вашего конкретного случая использования производителем и потребителем, создайте свою собственную более простую очередь / поток FIFO, гарантирующую многопоточность. Например, если вы узнали, что (за вычетом условий гонки) append
и pop
идеально подходят для вашего использования, просто создайте класс, который защищает каждого с помощью захвата / снятия блокировки (используйте оператор with
) - Queue
добавляет незначительные накладные расходы для поддержки нескольких производителей и потребителей, и вы можете сократить эти несколько наносекунд! -)