Найти - Пользователи
Полная версия: Потоки, очередь.
Начало » Python для новичков » Потоки, очередь.
1
plusplus
Вроде всё читаю, ищу, нахожу, но не могу понять как делать. Будьте добры напишите пример очереди потоков. Мне нужно, чтобы одновременно выполнялось 5 потоков функции step_one(), как только один завершается, вызывается новый поток.
plusplus
И всё же ответьте как я просил, пожалуйста, я новичок, буквально сразу с практики начал, на ней учусь в эти статьи я вникаю потихоньку, но надо побыстрее реализовать то о чем я прошу.
Вот простейший пример, создается THREADS потоков.
class MyThread(threading.Thread):
def run(self):
step_one()
for x in range(THREADS)
MyThread().start()
Что нужно поправить, чтобы потоки вызывались, когда их меньше THREADS?
plusplus
lorien
Я же выше показал код. Ваш код - это то, что помечено тремя точками в первой строчке моего кода.
Торопился я, нервничал, извините=) А вообще помогло, спасибо
topazz
Что-то я туплю а как делать новый потоки, если например один из демонских потоков падает в ексепшен.

 
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()
slav0nic
Корректно обрабатывать их в “Что-то хреначит” ;)
topazz
slav0nic
Корректно обрабатывать их в “Что-то хреначит” wink
Это один вариант. Собственно сейчас над ним и работаю. Но вот подумал может проще вообще забить на всякие корректные обработки. Упал тред ну и хрен с ним - поднимим новый.

Мне кажется это сэкономило бы кучу времени. Или я не прав?
slav0nic
можно и так, только если заказчик не Университет Ядерной Энергии :D
goblin_maks
почему бы не использовать threading.Semaphore() ? помойму самый простой вариант..реализованый в модуле threading..
topazz
Да, да. Я пока вообще новичек. С семафором быстро не вкурил.

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

Пока не понял почему.
goblin_maks
а с семафором все просто…

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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB