python - 最大化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
解决方案
推荐阅读
- c++ - 如何访问 gdb 中 std::set 元素的值?
- javascript - 自动重定向到 EXPO url (exp://...) 的网页
- java - 在尝试切换到它之前等待窗口打开
- r - 如何修复“二进制运算符的非数字参数”错误?
- python - Python/Selenium - 不知道如何解决循环问题
- python - 动态 Oracle 查询以对表中的类生成选择计数
- javascript - 用于拆分右字符串值的 Google 脚本
- node.js - 在 express/multer 中读取 CSV 文件而不将文件保存在服务器上
- sql-server - SQL Server:While 循环需要很长时间(12 秒)才能仅处理 2000 条记录
- java - 使用 app.yml 配置的 Google Cloud App Engine 标准 spring boot java 11 maven deploy 中的服务名称没有改变