Домой

Последняя активность

  

Многопоточность в Python

PyDeKolt avatar PyDeKolt (0) [#] (27.05.2013 / 18:22)
Модуль thread позволяет создавать несколько потоков и управлять ими. Предоставляет средства низкого уровня для работы с несколькими потоками, совместно использующими глобальные данные. Для синхронизации модуль предо-
ставляет простые средства блокировки.
  1. # -*- coding: utf-8 -*-
  2. # http://docs.python.org/library ... .html
  3. import thread
  4. import urllib
  5. import time
  6. # Время начала работы программы
  7. t1 = time.time()
  8. # Список сайтов для чтения
  9. list_url = ('http://www.kremlin.ru',
  10. 'http://www.gosuslugi.ru',
  11. 'http://www.python.org',
  12. 'http://www.djangoproject.org',
  13. 'http://www.yandex.ru',
  14. 'http://www.google.ru',
  15. )
  16. # Создадим функцию, которая будет выполняться одновременно разными потоками
  17. def read_site(number, url, lock):
  18. t1 = time.time()
  19. r = urllib.urlopen(url)
  20. t2 = time.time()
  21. print "#%s, site: %s, time: %.2f" % (number, url, (t2-t1))
  22. # Освобождаем объект
  23. lock.release()
  24. # Список объектов блокировки потоков
  25. lock_list = []
  26. for number, url in enumerate(list_url):
  27. # Создаем новый объект блокировки. Изначально блокировка в состоянии False.
  28. lock = thread.allocate_lock()
  29. # Блокируем объект
  30. lock.acquire()
  31. # Запоминаем блокировку
  32. lock_list.append(lock)
  33. # Запускаем новый поток и выполняем в нем функцию
  34. thread.start_new_thread(read_site, (number, url, lock))
  35. # Ожидаем завершения всех потоков
  36. while(any([l.locked() for l in lock_list])):
  37. time.sleep(2)
  38. # Время завершения работы программы
  39. t2 = time.time()
  40. print 'Execution of all threads is complete, time: %.2f' % (t2-t1)
  41. """
  42. #0, site: http://www.kremlin.ru, time: 0.09
  43. #4, site: http://www.yandex.ru, time: 0.15
  44. #5, site: http://www.google.ru, time: 0.17
  45. #2, site: http://www.python.org, time: 0.19
  46. #1, site: http://www.gosuslugi.ru, time: 0.52
  47. #3, site: http://www.djangoproject.org, time: 1.63
  48. Execution of all threads is complete, time: 2.00
  49. """

+ Процессы и потоки в Python
* Онлайн учебник для Python
  Всего: 1

Зарегистрируйтесь и сможете комментировать все темы. Кнопочка вверху
Фильтр по автору
Скачать тему

В Форум

Новые вверху
Statok.net Рейтинг@Mail.ru
spywap.nettop-sid.ru
Яндекс.Метрика