Вы можете попробовать многопоточность, чтобы сделать это быстрее
from PIL import ImageGrab
from graphics import *
import numpy as np
from threading import Thread
win = GraphWin('screenshot',1000,1000)
def draw(pixel_ranges):
for y in pixel_ranges:
for x in pixel_ranges:
r, g, b = rgb_img.getpixel((x,y))
head = Circle(Point(x,y),1)
head.setFill(color_rgb(r,g,b))
head.setWidth(0)
head.draw(win)
num_threads = 10
image_size = 1000
pixel_splits = np.split(np.arange(1000),num_threads)
n_threads = []
img = ImageGrab.grab()
rgb_img = img.convert('RGB')
for t in range(num_threads):
thread = Thread(target = draw, args = (pixel_splits[t],))
thread.start()
n_threads.append(thread)
for t in n_threads:
t.join()
В основном, что я делаю здесь, я создаю список пикселей от 0 до 1000, используя np.arange () и разделяя этот списокзатем на 10 равных частей мы создаем 10 потоков, которые отвечают за заполнение пикселей в их диапазоне, поэтому поток 0 получает пиксели 0-100, поток 1 получает пиксели 100-200 и т. д., это должно значительно повысить производительность
РЕДАКТИРОВАТЬ: Чем больше потоков, тем быстрее будет работать ваш код, но будьте осторожны: если у вас есть 4 сокета ЦП, каждый ЦП может иметь до 12 ядер, а каждое ядро может иметь два потока.Максимальное количество потоков составляет 4 ЦП x 12 ядер x 2 потока на ядро, поэтому 12 x 4 x 2 равно 96. Следовательно, максимальное число потоков равно 96, а максимальное число ядер равно 48, превышение этого значения или сближение с этим числом потоков может привести кжарь свою машину,