Установка фона рабочего стола MS с модулем cytpes в python слишком медленная, чтобы использовать ее как видео

tl; dr Обычный способ использования python для установки фона рабочего стола с помощью ctypes слишком медленный для целей анимации. Мне интересно, есть ли у меня какие-либо варианты установки фона на O (5 кадров в секунду), не снижая производительности моего компьютера.

~~~~

Привет, ребята!

На днях меня воодушевила эта идея: я хотел, чтобы фон моего рабочего стола проходил через самые последние изображения Солнца (из SDO), загруженные с веб-сайта НАСА. И это сработало! У меня есть код, который работает в фоновом режиме на моем компьютере и обновляет мой рабочий стол каждые тридцать секунд до новейшего изображения из Интернета (он также циклически переключает длины волн. Очень весело!) И это действительно круто! Смотреть на него каждый день и видеть, как меняется солнце, - это круто. Так что это успех.

Но у Солнца также есть много краткосрочной динамики, которую я тоже хотел бы наблюдать! Итак, подумал я, решение достаточно простое! Просто сохраните последние 30 загруженных изображений и быстро раздайте их! Петля достаточно простая (перегонка до базовых компонентов):

import os
import ctypes
import time

#Get the filepaths of all pictures in a folder
folderPath = fromGod()
items = os.listdir(folderPath)  
listOfFiles = [folderPath + item for item in items]

frameTime = 0.25 #second
runFor = 30 #seconds

#Cycle through the pictures 
startTime = time.time()
while time.time() - startTime < runFor:
    for file in listOfFiles:
        ctypes.windll.user32.SystemParametersInfoW(20, 0, file , 0)
        time.sleep(frameTime)

Это действительно работает! Выглядит неплохо, и я бы даже согласился на 4 кадра в секунду, на которые он, кажется, способен, прежде чем он вообще перестанет работать. Проблема в том, что каждый вызов функции ctypes заставляет всю систему {зависать ?. заикаться ?, тормозить?}. Это полностью убивает идею, потому что я не могу позволить этому коду работать в фоновом режиме. Из-за этого моя мышь заикается по экрану.

Но я вижу, что существуют программы, которые могут превратить фон рабочего стола в фильм, поэтому я надеюсь, что есть другой способ сделать это самостоятельно на Python. Думаю, я просто не понимаю, почему эта функция должна иметь такую ​​утечку в системе. Но поиск здесь при переполнении стека и в Google не дал результатов с точки зрения альтернативных способов сделать это.

Я нахожусь на ноутбуке Dell с Windows 10, на котором запущен python 3.6.5 в форме Anaconda.

Какого размера каждое изображение, которое вы загружаете и готовите для установки в качестве обоев? попробуйте уменьшить размер изображения и разрешение и протестируйте код.

Mojtaba Tajik 10.09.2018 04:55

Изначально я использовал 2048x2048, но я просто попробовал 1024 и 512, и это не повлияло на это.

Gilly Gumption 10.09.2018 05:05

Для начала пробовали ли вы написать приведенный выше код в C, чтобы узнать, действительно ли проблема в Python? (в чем я как бы сомневаюсь). Что в вашей программе занимает так много времени? Помните, что вам не следует использовать time.sleep(frameTime), но вы должны вычесть время, необходимое для завершения SystemParametersInfoW. На самом деле вам даже не нужен шлейф for. О каком количестве файлов идет речь (в folderPath)? Кстати вы используете компьютер, чтобы смотреть на рабочий стол? Не имеет смысла установить приложение, которое будет циклически переключать изображения только тогда, когда вы хотите их просматривать? У Победить нет опции слайд-шоу?

CristiFati 10.09.2018 10:35

У меня есть несколько мониторов, и один из них часто достаточно четкий, так что на нем интересно наблюдать за солнцем вживую. Обычно я думаю не более 10-30 файлов.

Gilly Gumption 11.09.2018 06:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
53
0

Другие вопросы по теме