Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2009 08:21:39

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Потоки, очередь.

Вроде всё читаю, ищу, нахожу, но не могу понять как делать. Будьте добры напишите пример очереди потоков. Мне нужно, чтобы одновременно выполнялось 5 потоков функции step_one(), как только один завершается, вызывается новый поток.



Офлайн

#2 Фев. 14, 2009 11:46:33

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Потоки, очередь.

И всё же ответьте как я просил, пожалуйста, я новичок, буквально сразу с практики начал, на ней учусь в эти статьи я вникаю потихоньку, но надо побыстрее реализовать то о чем я прошу.
Вот простейший пример, создается THREADS потоков.

class MyThread(threading.Thread):
def run(self):
step_one()
for x in range(THREADS)
MyThread().start()
Что нужно поправить, чтобы потоки вызывались, когда их меньше THREADS?



Офлайн

#3 Фев. 18, 2009 21:38:39

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Потоки, очередь.

lorien
Я же выше показал код. Ваш код - это то, что помечено тремя точками в первой строчке моего кода.
Торопился я, нервничал, извините=) А вообще помогло, спасибо



Офлайн

#4 Сен. 10, 2009 02:23:29

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки, очередь.

Что-то я туплю а как делать новый потоки, если например один из демонских потоков падает в ексепшен.

 
akkiQueue = очередь

def doform():
while True:
a = akkiQueue.get()
Что-то хреначим
akkiQueue.task_done()

for i in xrange(max_potokov):

nam = "Thread"+str(i)
p = threading.Thread(target=doform, name=nam)
p.setDaemon(True)
p.start()
time.sleep(1)

akkiQueue.join()



Отредактировано (Сен. 10, 2009 02:23:56)

Офлайн

#5 Сен. 10, 2009 10:22:17

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Потоки, очередь.

Корректно обрабатывать их в “Что-то хреначит” ;)

Офлайн

#6 Сен. 10, 2009 11:16:25

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки, очередь.

slav0nic
Корректно обрабатывать их в “Что-то хреначит” wink
Это один вариант. Собственно сейчас над ним и работаю. Но вот подумал может проще вообще забить на всякие корректные обработки. Упал тред ну и хрен с ним - поднимим новый.

Мне кажется это сэкономило бы кучу времени. Или я не прав?



Офлайн

#7 Сен. 10, 2009 12:40:23

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Потоки, очередь.

можно и так, только если заказчик не Университет Ядерной Энергии :D

Офлайн

#8 Сен. 10, 2009 15:59:07

goblin_maks
От:
Зарегистрирован: 2008-12-10
Сообщения: 110
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки, очередь.

почему бы не использовать threading.Semaphore() ? помойму самый простой вариант..реализованый в модуле threading..



Офлайн

#9 Сен. 10, 2009 16:27:19

topazz
От:
Зарегистрирован: 2008-09-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки, очередь.

Да, да. Я пока вообще новичек. С семафором быстро не вкурил.

Потыкавшись, решил что все же лучше отловить все эксепшены. Вроде все отловил :rolleyes:
Только, то что я думал должно работать быстрее стало работать медленее :D

Пока не понял почему.



Отредактировано (Сен. 10, 2009 16:28:35)

Офлайн

#10 Сен. 10, 2009 17:05:55

goblin_maks
От:
Зарегистрирован: 2008-12-10
Сообщения: 110
Репутация: +  0  -
Профиль   Отправить e-mail  

Потоки, очередь.

а с семафором все просто…

import time
import threading
max_potokov = 20
maxconnections = 5
akkiQueue = threading.BoundedSemaphore(value=maxconnections)




def doform(val):
akkiQueue.acquire()
print "Start thr :" + val + "\n"
time.sleep(5)
print "End thr :" + val + "\n____________________"
akkiQueue.release()

for i in xrange(max_potokov):
time.sleep(1)
nam = "Thread"+str(i)

p = threading.Thread(target=doform, name=nam, kwargs = {"val": nam} )
p.setDaemon(True)
p.start()



Отредактировано (Сен. 10, 2009 17:14:13)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version