Итак, я использую процессы и очередь для поиска данных и поиска строк, которые имеют одну и ту же запись в разных столбцах. Я решил использовать многопроцессорную обработку, чтобы попытаться сделать так, что можно масштабировать для больших данных. Файл имеет 1000 строк и 10 точек данных в строке. Я читаю только 80 строк данных и программных киосков. 70 линий, и он отлично работает и при приличной скорости.Поиск списка многопроцессорных сетей
Мой вопрос в том, что я делаю неправильно или это ограничения с таким подходом, который я не идентифицировал? Код не идеален никакими средствами и, вероятно, сам по себе плох. Код выглядит следующим образом:
from multiprocessing import Process, Queue
import random
def openFile(file_name, k, division):
i = 0
dataSet = []
with open(file_name) as f:
for line in f:
stripLine = line.strip('\n')
splitLine = stripLine.split(division)
dataSet += [splitLine]
i += 1
if(i == k):
break
return(dataSet)
def setCombination(q,data1,data2):
newData = []
for i in range(0,len(data1)):
for j in range(0, len(data2)):
if(data1[i][1] == data2[j][3]):
newData += data2[j]
q.put(newData)
if __name__ == '__main__':
# Takes in the file, the length of the data to read in, and how the data is divided.
data = openFile('testing.txt', 80, ' ')
for i in range(len(data)):
for j in range(len(data[i])):
try:
data[i][j] = float(data[i][j])
except ValueError:
pass
#print(data)
k = len(data)//10
q = Queue()
processes = [Process(target=setCombination, args=(q, data[k*x: k + k*x], data))
for x in range(10)]
for p in processes:
p.start()
# Exit the completed processes
for p in processes:
p.join()
saleSet = [q.get() for p in processes]
print('\n', saleSet)
Файл testing.txt
10k точки данных кажется, что слишком мало, чтобы извлечь выгоду из многопроцессорных. Попробуйте написать простейшее однопроцессорное однопоточное решение, которое вы можете сначала, а затем подумайте о параллелизации решения, используя конструкции более высокого уровня, такие как 'multiprocessing.Pool '. – Apalala
при использовании конструкции 'with open', вам не нужно явно закрывать файл. Это преимущество оператора с заявлением – Aaron
Вы буквально означаете, что программа зависает бесконечно с 80 строками данных, но не 70? – martineau