Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 01.07.2019
Сообщений: 3

Замедляется выполнения цикла for

01.07.2019, 23:07. Показов 2494. Ответов 6

Студворк — интернет-сервис помощи студентам
Питон 3,4
Здравствуйте. Такая проблема. Хочу прочитать значение всех пикселей экрана (принтом в терминал или в тхт файл, не важно). Приоритет именно на скорость. Код выполняется но постепенно замедляясь . .. и где-то после 10 000 пикселей выдает ошибку «pywintypes.error: (0, ‘GetPixel’, ‘No error message is available’)». Я так понимаю перегружается оператива , или просто идет захламление в коде устаревшими данными, как отдавать оперативу обратно системе толком не понял. Пытался использовать dc.collect() , но толе я его не так юзаю, толе он тут не помогает. Подскажите пожалуйста , как исправить код чтобы можно было прочитать всех пиксели экрана без ошибок и замедлений.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.07.2019, 23:07
Ответы с готовыми решениями:

Продолжение выполнения цикла после нажатия клавиши
Имеется двумерный list, пример: , , ], в котором заключены введёные пользователем данные. Необходимо составить схему (точнее, list с...

Как закрыть программу во время выполнения цикла while
У меня возникла такая проблема, когда я пытаюсь закрыть программу во время выполнения while у меня она тупо не закрывается, хотелось-бы...

Прогресс выполнения цикла
Подскажите, вот есть цикл private void ProcessedF() { int j = 0; for (int i = 0; i < 10; i++,...

6
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
02.07.2019, 12:11
Vladmen1, почита по этой ошибке на стековерфлоу, там вроде как приводят пару возможных причин. Второе -пиши не в консоль (там ограничение по количеству строк) а в файл, например через запятую. Как вариант можно перехватывать исключение и записать по каким координатам не считалось.
0
0 / 0 / 0
Регистрация: 01.07.2019
Сообщений: 3
02.07.2019, 13:01  [ТС]
Спасибо за совет .на стековерфлоу посмотрю). Ну что в консоли что в PyScripter оно выдает ошибку по истечению примерно 10000 итераций. Просто на данным момент получается чтобы считать пиксели всего экрана (1360*760) нужно создать десятки отдельных файлов .py . чтобы каждый отдельный файл считывал определенный участок экрана. Одним файлом .ру прога не вытягивает. Мне по сути нужен только пиксель в данной итерации циела, все предыдущие цвета пикселей уже не нужны.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
02.07.2019, 13:10
Vladmen1,
0. Самое главное - зачем эта задача? Если анализировать весь экран - есть специальная функция для дампа, уж не знаю, какая.
1. контекст (hdc) у вас тоже получается в цикле. С чего бы?
2.
Цитата Сообщение от Vladmen1 Посмотреть сообщение
Мне по сути нужен только пиксель в данной итерации циела, все предыдущие цвета пикселей уже не нужны.
Ну так и берите один, зачем эти циклы-то?
3. зачем лишние переменные, i и x равны друг другу.
4. Ой блин, цикл по i внутри и снаружи! В латинском алфавите ещё многабукаф! (Ниасилил?)
1
0 / 0 / 0
Регистрация: 01.07.2019
Сообщений: 3
02.07.2019, 15:50  [ТС]
Вобще в качестве обучения решил создать бота в игре( больше похоже на имитацию действий человека)В игре есть магазин с предметами и ценами. Бот анализрует эти цены,и выставляет предмет вв этот же магазин по оптимальной цене. Все получилсь, но когда предметов для выставления в магазин много~ нужно соответственно много проанализировать цен чтобы выявить наилучшую цену для моих предметов. так вот как раз анализируя пиксели цен ~,бот постепенно замедляется,и замедляется и ви итоге вылетает с ошибкой. Я решил выявить в чем именно проблема~ вычленил из 2000 строк кода участок который определяет пиксели, немного упростил его и получился тот код который,мы обсуждаем. реализация этого кода может и корявая, но ошибка, и замедление выполнения в этом коде аналогичные той что в моем боте.
суть в,том что после длительного анализа пикселей код замедляется, а что очищать, какие переменые, или мусор может какойи с dc.collect()),чтобы коди мог анализировать пиксели бесконечно ~,я,не понял
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
02.07.2019, 16:01
Vladmen1, шта? а зачем анализировать для этого пиксели? апи нет у сервиса (или сайт?), чтобы просто их запросить?

Цитата Сообщение от Vladmen1 Посмотреть сообщение
реализация этого кода может и корявая, но ошибка, и замедление выполнения в этом коде аналогичные той что в моем боте.
так устрани то, что тебе показали, прочти ссылку что тебе дали, действуй
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
02.07.2019, 16:22
Vladmen1, "анализирует" как нейронная сеть, что ли?
Если надо весь экран анализировать - ищите, как дампить весь экран. Что-то типа BitBlt, я точно не знаю, не силён в winapi.
В файл или в память.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.07.2019, 16:22
Помогаю со студенческими работами здесь

Задержка выполнения цикла
Добрый день, подскажите пожалуйста, как мне сделать, чтобы команда выполнялась с задержкой (Например, чтобы команда setText выполнялась не...

Ошибка выполнения цикла
Совершенно тупой вопрос... Есть простенький цикл, ошибка в 11 строке: ожидалось "(" перед числовой константой. Где здесь-то...

Условие выполнения цикла
#include <iostream.h> void main() { char a; int r=1; cin>>a; if(a==r) { cout<<"test"<<endl; ...

Замедление выполнения цикла for
Всем привет.пишу прогу для lpt порта для параллельной микросхемы...для перебора адресов использую цикл for. проблема в том что цикл...

Замедление выполнения цикла for
Всем привет.пишу прогу для lpt порта для параллельной микросхемы...для перебора адресов использую цикл for. проблема в том что цикл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru