python - 如何使此任务提高 cpu 使用率?

标签 python multithreading

我尝试对许多文件进行哈希处理,但它没有使用满 CPU 能力。它只消耗25%。我测试将繁重的进程移动到线程中。但仍然没有什么不同。我来自 nodejs 使用 sharp 库。有同样的任务。它消耗所有的CPU使用率。 python如何让它发挥最大的作用?

import cv2
import math
import datetime
import hashlib
import threading

def thread_function(image, yPos, xPos, wSizeBlock, hSizeBlock):
    block = image[yPos:yPos+wSizeBlock, xPos:xPos+hSizeBlock]

    hash = hashlib.sha256()
    hash.update(block.tobytes())
    print(hash.hexdigest())

image = cv2.imread('frame323.jpg', cv2.IMREAD_COLOR)
dimension = {
    'width': image.shape[1],
    'height': image.shape[0]
}

wSizeBlock = int(16)
hSizeBlock = int(16)
wBlockLength = math.floor(dimension['width'] / wSizeBlock)
hBlockLength = math.floor(dimension['height'] / hSizeBlock)
count = 0

start_time = datetime.datetime.now()
print(start_time)
for k in range(0, 500):
    for i in range(0, wBlockLength):
        for j in range(0, hBlockLength):
            xPos = int(i*wSizeBlock)
            yPos = int(j*hSizeBlock)

            x = threading.Thread(target=thread_function, args=(image, xPos, yPos, wSizeBlock, hSizeBlock))
            x.start()
            count += 1
    count = 0

end_time = datetime.datetime.now()
print(end_time)

最佳答案

对于可以拆分为较小任务的 CPU 密集型操作,您可能需要使用多处理模块。它类似于线程模块,因为它允许同时运行多个函数。语法看起来像这样:

import multiprocessing as mp


def add(a, b):
    return a + b


p = mp.Process(target=add, args=(1, 2))
p.start()

关于python - 如何使此任务提高 cpu 使用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72749892/

相关文章:

java - 从同步块(synchronized block)调用这个同步方法可以吗?

python - 防止 sphinx 执行继承的 doctests

python - 如何根据另一个具有 key 的列表来订购字典列表?

python - 使用 Python 检索图像描述(不通过 PIL 或 exifread 在 EXIF 数据中返回)

java - 如何使用 ExecutorService 划分线程?

multithreading - 处理长时间运行的 Hibernate 事务中的死锁

c# - Application.Exit() 与 Application.ExitThread() 与 Environment.Exit()

python - 在 Arch Linux 上 pip 安装 mysqlclient

python - 正确使用QTimer.singleShot

r - 多线程 Flask 应用程序导致 rpy2 R 进程中出现堆栈错误