首页 > 解决方案 > 最大化python进程的所有CPU内核的使用率

问题描述

在这里,我将数据列表拆分为可用内核的数量并在它们上启动一个进程。第一种方法可以使用 100% 的所有内核,但第二种方法仅在 40-50% 的内核上运行。关于如何加快速度的任何想法?我已经尝试使用 multiprocessing.Pool() 和 concurrent.futures 库来运行它,但没有一个可以加快速度。

   #chunking list
    n = int(len(list) /  mp.cpu_count())

    chunks = [list[i:i + n] for i in range(0, len(list), n)]

    processes = []
    print('Processing list on {0} cores...'.format(mp.cpu_count()))
    for chunk in chunks:
        p = mp.Process(target=process, args=[chunk])
        p.start()
        processes.append(p)

    for p in processes:
        p.join()

    print('Creating and writing statistics for {0} individual domains...'.format(len(unique_list)))

    for p in processes:
        p.close()

    # chunking unique list
    n = int(len(unique_list) / mp.cpu_count())
    chunks2 = [unique_list[i:i + n] for i in range(0, len(unique_list), n)]
    processes2 = []

    pool = mp.Pool(processes=mp.cpu_count())

    for chunk in chunks2:
        p = mp.Process(target=statistics, args=[chunk])
        p.start()
        processes2.append(p)

    for p in processes2:
        p.join()
def process(list):
    for item in tqdm(list):
        if(check(list, item)):
            item = item.lower().split('@')[1]
            if item not in unique_list:
                unique_list.append(item)
# end of process

# statistics
def statistics(list):
    f = open("{0}/result.txt".format(dirname),"w+")
    for item in tqdm(list):
        if(domains.count(item) > 0):
            f.write("{0} | {1} \r\n".format(domains.count(item), item))
    f.close()
# end of statistics

标签: pythonmultithreadingperformanceconcurrencymultiprocessing

解决方案


推荐阅读