Я не думаю, что вам нужна очередь, если вы не собираетесь извлекать данные из приложений (что, если вам нужны данные, я думаю, что в любом случае может быть проще добавить их в базу данных)
но примерьте размер:
поместите содержимое вашего скрипта create_graphs.py в функцию под названием "create_graphs"
import threading
from create_graphs import create_graphs
num_processes = 64
my_list = [ 'XYZ', 'ABC', 'NYU' ]
threads = []
# run until all the threads are done, and there is no data left
while threads or my_list:
# if we aren't using all the processors AND there is still data left to
# compute, then spawn another thread
if (len(threads) < num_processes) and my_list:
t = threading.Thread(target=create_graphs, args=[ my_list.pop() ])
t.setDaemon(True)
t.start()
threads.append(t)
# in the case that we have the maximum number of threads check if any of them
# are done. (also do this when we run out of data, until all the threads are done)
else:
for thread in threads:
if not thread.isAlive():
threads.remove(thread)
Я знаю, что это приведет к тому, что количество потоков будет на 1 меньше, чем у процессоров, что, вероятно, хорошо, но оставляет процессору управление потоками, дисковым вводом-выводом и другими событиями, происходящими на компьютере. Если вы решили использовать последнее ядро, просто добавьте к нему одно
edit : Я думаю, что, возможно, неправильно истолковал цель my_list. Вам не нужно my_list
для отслеживания потоков вообще (так как на них все ссылаются элементы в списке threads
). Но это прекрасный способ подачи входных данных процессов - или даже лучше: используйте функцию генератора;)
Цель my_list
и threads
my_list
содержит данные, которые необходимо обработать в вашей функции
threads
это просто список текущих запущенных тем
цикл while делает две вещи, запускает новые потоки для обработки данных и проверяет, запущены ли какие-либо потоки.
Так что, если у вас есть (а) больше данных для обработки или (б) потоки, которые еще не завершены ... вы хотите, чтобы программа продолжала работать. Как только оба списка опустеют, они получат значение False
, и цикл while завершится