Найти - Пользователи
Полная версия: Замедляется выполнения цикла for
Начало » Python для новичков » Замедляется выполнения цикла for
1
vladmen
Питон 3,4
Здравствуйте. Такая проблема. Хочу прочитать значение всех пикселей экрана (принтом в терминал или в тхт файл, не важно). Приоритет именно на скорость. Код выполняется но постепенно замедляясь . .. и где-то после 10 000 пикселей выдает ошибку «pywintypes.error: (0, ‘GetPixel’, ‘No error message is available’)». Я так понимаю перегружается оператива , или просто идет захламление в коде устаревшими данными, как отдавать оперативу обратно системе толком не понял. Пытался использовать dc.collect() , но толе я его не так юзаю, толе он тут не помогает. Подскажите пожалуйста , как исправить код чтобы можно было прочитать всех пиксели экрана без ошибок и замедлений.
 import win32gui
def pixel_color_at(x, y):
    hdc = win32gui.GetWindowDC(win32gui.GetDesktopWindow())
    c = int(win32gui.GetPixel(hdc, x, y))
        # (r, g, b)
    return (c & 0xff), ((c >> 8) & 0xff), ((c >> 16) & 0xff) #преобразование в RGB
y=0
for i in range(1,760):# по x
    x=0
    y=y+1
    for i in range (1,1300): # по у
        x=x+1
        pixel = pixel_color_at(x,y)
        print (pixel,x)
doza_and
vladmen
Приоритет именно на скорость.
Тот у кого приоритет скорость не будет делать принт на консоль, тем более в винде.
Нормальное решение в первой же ссылке. https://stackoverflow.com/questions/2846947/get-screenshot-on-windows-with-python

 import wx
wx.App()  # Need to create an App instance before doing anything
screen = wx.ScreenDC()
size = screen.GetSize()
bmp = wx.EmptyBitmap(size[0], size[1])
mem = wx.MemoryDC(bmp)
mem.Blit(0, 0, size[0], size[1], screen, 0, 0)
del mem  # Release bitmap
bmp.SaveFile('screenshot.png', wx.BITMAP_TYPE_PNG)

 from mss import mss
with mss() as sct:
    sct.shot()

vladmen
выдает ошибку
Если вы взялись работать с низкоуровневыми интерфейсами ОС то работать надо по их правилам. Питон тут не виноват и никакая сборка мусора не поможет. Скорее всего вы истощили ресурсы ОС по количеству контекстов. WindowDC надо освобождать после использования.
vladmen
Большое спасибо за ответ Попробую внедрить Ваше замечание
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB