Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Новичек о многопоточности... Проверьте пожалуйста. 
:(
    Опции темы
nerdyGuy
Дата 16.11.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Здравствуйте.
Я месяц программирую на питоне и вот дошел до многопоточности. Прочитал нужную главу в книге, но остались кое-какие пробелы.
Я приведу пример своего тестового приложения с использованием Threading & Queue и хотел бы чтобы вы его мне коечто пояснили.

Суть скрипта :
Заставить работать одновременно максимум 10 потоков
В качестве операции выполнения я выбрал вывод длины строки (URL ссылки из листа)

Вот код :
Код

import threading #Импортируем модуль многопоточности
import Queue #Импортируем модуль "очередь"

linksStack = [] #Создаём пустой список, сюда надо из файла сложить URL ссылки
linksFile = open("links.txt") #Открываем файл

for line in linksFile: #Пробегаемся по файлу и складываем ссылки в список
    linksStack.append(line)

linksFile.close()

threadsQueue = Queue.Queue(10) #Создаём очередь размером в 10 объектов
workerLockObj = threading.Lock() #Создаём лок объект

class linksparser(threading.Thread):  #Наследуемся
    def __init__(self, numOfLine, link): #Перегружаем конструктор
        self.target = link #Это наша URL ссылка для обработки
        self.lnn = numOfLine #Это номер текущей строки из списка (для нумерации)
        threading.Thread.__init__(self)

    def run(self): #Перегружаем функцию выполнения
        workerLockObj.acquire() #Блочим
        print 'Line N%s : Length %s' % (self.lnn, len(self.target)) #Выводим всё что надо
        workerLockObj.release() #Освобождаем

for i in range(len(linksStack)): #Пробегаем по списку ссылок и обрабатываем их
    wrkThread = linksparser(i, linksStack[i]) #Создаем новый поток с данными
    threadsQueue.put(wrkThread) #Добавляем его в очередь
    goTh = threadsQueue.get() #Вытаскиваем поток
    goTh.start() #Запускаем
    goTh.join() #Ждём его завершения

   #И так по кругу, по всем ссылкам из списка.


Вот вопрос :
Здесь у меня одновременно работают только 10 потоков (как установлено в Queue maxsize)? Как это можно проверить?

Спасибо.


Это сообщение отредактировал(а) nerdyGuy - 16.11.2009, 15:57
PM MAIL   Вверх
111u3
Дата 16.11.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 31.8.2009
Где: Омск

Репутация: нет
Всего: нет



самый простой и тупой способ заставить каждый послать мессагу с его номером что дескать вот он я.
PM MAIL ICQ   Вверх
nerdyGuy
Дата 16.11.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



111u3, не очень понял, о чём это вы?
Я так понял что мой скрипт одновременно выполняет только 1 поток из очереди, а как чтоб 10 было (и не превышало)?

Это сообщение отредактировал(а) nerdyGuy - 16.11.2009, 19:04
PM MAIL   Вверх
111u3
Дата 17.11.2009, 05:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 31.8.2009
Где: Омск

Репутация: нет
Всего: нет



Если ты хочешь одновременной несколько потоков то убери join чтобы не ждать. Используя проверку ты сможешь сделать так чтобы у тебя было ровно 10 потоков и не более.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1006 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.