Многопроцессорность не работает на всех ядрах процессора - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть параллельная обработка в Python, которая считывает данные из базы данных, выполняет некоторые манипуляции и запускает алгоритм Дейкстры:

t1 = 200101
t2 = 200229
import psutil
from multiprocess import Pool
pool = Pool(psutil.cpu_count(logical=False))
def graph_analysis(i):
    input_date = str(i)
    sql_data = """select trim(cast(p.Barcode as nvarchar(20))) Barcode ,cast(s.invoiceid as 
    nvarchar(20)) invoiceid
    from sales s inner join Product_981115 p on s.productid = p.productid 
    where s.date = """+ input_date +""" and s.qty != 0 and p.sectionid != 1691.199 and s.RegionID = """ + input_region
    data = [] 
    for chunk in pd.read_sql(sql_data,conn,chunksize = 1000000):
         data.append(chunk)
    data = pd.concat(data, ignore_index = True)
    data = data.merge(candid_sale_invoices)
    data = data.merge(candid_barcodes)
    final_edges_df = data.iloc[:,[2,3,4]]
    final_edges_tuples = [tuple(x) for x in final_edges_df.values]

    Gm = ig.Graph.TupleList(final_edges_tuples, directed = True, edge_attrs = ['weight'])

    longest_paths = pd.DataFrame(Gm.shortest_paths_dijkstra(None,None, weights = 'weight'))
    longest_paths = longest_paths.swifter.apply(log_transform)
    longest_paths["Date"] = input_date
    longest_paths["RegionID"] = input_region
    Return longest_paths

results = pool.map(graph_analysis,range(t1,(t2) + 1)))
pool.close()
results= pd.concat(results, ignore_index = True)

Я запускал этот код пару дней go и он идеально выполнен параллельно, используя почти все ядра. Однако, когда я запускаю его сегодня, кажется, что я генерировал параллельные процессы, но ядра не обрабатывают параллельно. enter image description here

Система имеет 128 ГБ ОЗУ и 32 ядра, и ничего не изменилось со времени последнего успешного параллельного запуска. Я перезапустил систему, чтобы решить любую возможную проблему, но проблема все еще существует. Так в чем может быть проблема?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...