Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2018 18:26:26

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

queue и массив

В чем разница между использованием queue.Queue() вместо массива, вытаскивая из него по 1 элементу с методом .pop() с индекса 0? Может там проблему с MemoryError устранили или еще что-нибудь?



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#2 Авг. 14, 2018 19:53:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

queue и массив

Читай документацию
https://docs.python.org/3/library/queue.html

queue используется для взаимодействия с потоками. Список использовать нельзя, так как может быть соревнование двух потоков за его элементы.

Когда ты берёшь элемент из списка через pop(), то в начале вызова pop() в списке может находиться один элемент, который и должен быть возвращён, а во время вызова pop() другой поток может забрать элемент из списка. И у тебя получится ситуация, что pop() нашла элемент, приготовилась его вернуть, начинает его читать, а его там уже нет. Вот чтобы такого не было, нужна блокировка элемента, чтобы pop() успела проделать всё от начала до конца и вернула элемент этот. Вот у очереди есть такие блокировки, а у списка нет. Поэтому список ты можешь использовать, но только там, где не пересекаются потоки.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version