У меня есть этот скрипт:Python Threads, почему потоки в двух измерениях не работают?
import threading
import time
import sys
def threadWait(d1, d2):
global number
time.sleep(1) # My actions
number = number+1 # Count of complete actions +1
sys.stdout.write("\033[K") # Clean line to the end.
sys.stdout.write(str(number)+" (Thread "+str(d1)+", "+str(d2)+") done"+"\r") # Write number and carriage return.
sys.stdout.flush()
number = 0 # Count of complete actions
threadsToJoin = []
dimension1 = [] # Main action task.
for i in range(50): # I have 50 "Main Actions" I need to do in parallel threads.
d1 = i
dimension2 = [] # I need to do each "Main Action" in 10 threads.
for n in range(10):
d2 = n
dimension2.append(threading.Thread(target=threadWait, args=(d1,d2)))
dimension1.append(dimension2)
for item in dimension1:
for items in dimension2:
# But I can't do more than 100 Threads at once.
while True:
# Analogue of BoundedSemaphore.
if (int(threading.activeCount()) < 100):
items.start()
threadsToJoin.append(items)
break
else:
continue
for this in threadsToJoin:
this.join()
Но я получаю сообщение об ошибке о «Тема не может быть запущен в два раза». Но когда я добавляю все темы в dimension2
и работает так:
for item in dimension2:
# But I can't do more than 100 Threads at once.
while True:
# Analogue of BoundedSemaphore.
if (int(threading.activeCount()) < 100):
item.start()
break
else:
continue
Everythin будет хорошо, как excpected. Что не так с первым примером и как я могу выполнить всю потоковую обработку (многопоточность), как они это делают сейчас?
Это такая глупая ошибка 0_O Извините, иногда мне нужно взять сон кошки, чтобы очистить свой разум. – passwd