ставляет простые средства блокировки.
- # -*- coding: utf-8 -*-
- # http://docs.python.org/library ... .html
- import thread
- import urllib
- import time
- # Время начала работы программы
- t1 = time.time()
- # Список сайтов для чтения
- list_url = ('http://www.kremlin.ru',
- 'http://www.gosuslugi.ru',
- 'http://www.python.org',
- 'http://www.djangoproject.org',
- 'http://www.yandex.ru',
- 'http://www.google.ru',
- )
- # Создадим функцию, которая будет выполняться одновременно разными потоками
- def read_site(number, url, lock):
- t1 = time.time()
- r = urllib.urlopen(url)
- t2 = time.time()
- print "#%s, site: %s, time: %.2f" % (number, url, (t2-t1))
- # Освобождаем объект
- lock.release()
-
- # Список объектов блокировки потоков
- lock_list = []
- for number, url in enumerate(list_url):
- # Создаем новый объект блокировки. Изначально блокировка в состоянии False.
- lock = thread.allocate_lock()
- # Блокируем объект
- lock.acquire()
- # Запоминаем блокировку
- lock_list.append(lock)
- # Запускаем новый поток и выполняем в нем функцию
- thread.start_new_thread(read_site, (number, url, lock))
- # Ожидаем завершения всех потоков
- while(any([l.locked() for l in lock_list])):
- time.sleep(2)
- # Время завершения работы программы
- t2 = time.time()
- print 'Execution of all threads is complete, time: %.2f' % (t2-t1)
- """
- #0, site: http://www.kremlin.ru, time: 0.09
- #4, site: http://www.yandex.ru, time: 0.15
- #5, site: http://www.google.ru, time: 0.17
- #2, site: http://www.python.org, time: 0.19
- #1, site: http://www.gosuslugi.ru, time: 0.52
- #3, site: http://www.djangoproject.org, time: 1.63
- Execution of all threads is complete, time: 2.00
- """
+ Процессы и потоки в Python
* Онлайн учебник для Python