Форум сайта python.su
Вроде всё читаю, ищу, нахожу, но не могу понять как делать. Будьте добры напишите пример очереди потоков. Мне нужно, чтобы одновременно выполнялось 5 потоков функции step_one(), как только один завершается, вызывается новый поток.
Офлайн
И всё же ответьте как я просил, пожалуйста, я новичок, буквально сразу с практики начал, на ней учусь в эти статьи я вникаю потихоньку, но надо побыстрее реализовать то о чем я прошу.
Вот простейший пример, создается THREADS потоков.
class MyThread(threading.Thread):
def run(self):
step_one()
for x in range(THREADS)
MyThread().start()
Офлайн
lorienТоропился я, нервничал, извините=) А вообще помогло, спасибо
Я же выше показал код. Ваш код - это то, что помечено тремя точками в первой строчке моего кода.
Офлайн
Что-то я туплю а как делать новый потоки, если например один из демонских потоков падает в ексепшен.
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)
Офлайн
Корректно обрабатывать их в “Что-то хреначит” ;)
Офлайн
slav0nicЭто один вариант. Собственно сейчас над ним и работаю. Но вот подумал может проще вообще забить на всякие корректные обработки. Упал тред ну и хрен с ним - поднимим новый.
Корректно обрабатывать их в “Что-то хреначит” wink
Офлайн
можно и так, только если заказчик не Университет Ядерной Энергии :D
Офлайн
почему бы не использовать threading.Semaphore() ? помойму самый простой вариант..реализованый в модуле threading..
Офлайн
Да, да. Я пока вообще новичек. С семафором быстро не вкурил.
Потыкавшись, решил что все же лучше отловить все эксепшены. Вроде все отловил :rolleyes:
Только, то что я думал должно работать быстрее стало работать медленее :D
Пока не понял почему.
Отредактировано (Сен. 10, 2009 16:28:35)
Офлайн
а с семафором все просто…
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)
Офлайн