Аргумент или глобальная переменная?

argument ili globalnaya peremennaya Системные инструменты параллельного выполнения

Обратите внимание, что ссылка на очередь сохраняется в глобальной переменной. Благодаря этому очередь может использоваться всеми порожденными потоками выполнения (все они выполняются в одном процессе и в одном глобальном пространстве имен). Потоки изменяют сам объект очереди, а не ссылку в переменной, поэтому они точно так же могли бы работать с очередью, если бы она передавалась, как аргумент функции, выполняемой в потоке. Очередь является совместно используемым объектом в памяти, и неважно, каким способом поток обретет ссылку на него (полную версию сценария, фрагмент которого представлен ниже, вы найдете в файле queuetest2.py, в дереве примеров):

dataQueue = queue.Queue() # общий объект, неограниченный размер

def producer(idnum, dataqueue):

for msgnum in range(nummessages): time.sleep(idnum) dataqueue.put(‘[producer id=%d, count=%d]’ % (idnum, msgnum))

def consumer(idnum, dataqueue):

if __name__ == ‘__main__’:

for i in range(numproducers):

thread.start_new_thread(producer, (i, dataQueue))

for i in range(numproducers):

thread.start_new_thread(producer, (i, dataQueue))

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий