|  06.03.2020, 17:09 | #1 | 
| Участник | Обработка изображений 
			
			Всем доброго дня. У нас есть фотографии товаров. Хранятся в БД. Подавляющее большенство фотографий содержит белые края, порой очень даже большие. Появилась потребность взять и избавиться от них, но сделать это программным путем. Мы сейчас используем скрипт на питоне который анализирует фото, если края белые, то обрезает их до 20-ти пикселей и полученное изображение сохраняет в новый файл. Но есть две проблемы: 1) После вызова WinAPI::shellExecute() с параметром _waitForCompletion = true, проверяем наличие созданного файла и его нет. Если поставить задержку 700-900 милисекунд, то файл появляется. Т.е Ах получила отклик что выполнение закончилось, идет дальше по коду, а файла нет. Мы думаем что после выполнения скрипта сборщик мусора производит свои манипуляции и только в этот момент происходит окончательная запись в файл. Может можно его как-то заставить мгновенно сохранять? 2) Фотографии хранятся в разных форматах (jpg и png). Скрипт преобразовывает png в jpg, при этом на фото появляются шумы. Кто-нибудь сталкивался с подобной проблемой? Если да то как её решали? Либо у вас какой-нибудь другой способ? P.S. Чукча не Python-щик) | 
|  | 
|  06.03.2020, 17:18 | #2 | 
| Участник | 
			
			А если в самом скрипте ждать появления файла и только тогда завершать скрипт?
		 | 
|  | 
|  06.03.2020, 18:35 | #3 | 
| Участник | 
			
			Добавил в скрипт PHP код: 
			Пробую в Ах, таже беда. Не видит файл. Если в Ах добавить конструкцию подобною той что выше, то все норм. После 2-3 ожиданий Ах видит файл и обрабатывает его. | 
|  | 
|  06.03.2020, 19:23 | #4 | 
| Участник | 
			
			Такое ощущение, что файловая система отрабатывает как версионная БД. Кто файл создавал, тот его сразу видит. А все остальные - только после некоего коммита, который происходит с задержкой по времени. Может проблема не в питоне, а в том как винда с файлами работает ? Хотя скорее всего чудес нет и это какая-то отложенная (асинхронная) сборка мусора в питоне, которая сбрасывает файл на диск с задержкой, в момент его реального закрытия и высвобождения всех ресурсов. Но тогда вопрос, как там принудительно заставить файл сброситься на диск и высвободить все ресурсы. | 
|  | 
|  10.03.2020, 10:21 | #5 | 
| Участник | 
			
			Если запись происходит на файловое хранилище и под разными пользователями (под кем запускается AOS, отличается под кем крутится скрипт), то это нормальное поведение с файлами.
		 
				__________________ Любую техническую проблему можно решить, если есть достаточно времени и денег. | 
|  | 
|  10.03.2020, 10:29 | #6 | 
| Участник | Цитата: Фишка в том что скрипт питона запущенный из под аоса отработал, а результат не увидел. Он ему доступен через некоторое время. Правда ? Это почему ? | 
|  | 
|  10.03.2020, 10:56 | #7 | 
| Участник | 
			
			Ссылка Из статьи: Цитата: 
		
			Дело в том, что в версии SMB v2.x, представленном в Windows 2008 / Vista (см. таблицу с версиями протокола SMB) для уменьшения трафика и количества SMB запросов между SMB-клиентом и сервером, и ускорения доступа к общим папкам и файлам по сети стал использоваться механизм кэширования (это дает ощутимый эффект при доступе к сетевой папке через медленный канал или канал с большими задержками). Таким образом компонента Microsoft Redirector на компьютерах пользователей использует локальный кэш с метаданными сетевого каталога. По умолчанию этот кэш очищается каждые 10 секунд.
		
	 
				__________________ Любую техническую проблему можно решить, если есть достаточно времени и денег. | 
|  | |
| За это сообщение автора поблагодарили: Logger (3). | |
|  10.03.2020, 11:18 | #8 | 
| Участник | 
			
			Интересно. Но у нас не тот случай. Юзер один. Папка - локальный темп. | 
|  | 
|  10.03.2020, 14:35 | #9 | 
| Участник | 
			
			А отключение индексации файлов на сервере (Windows Search) не помогает ?
		 | 
|  | 
|  10.03.2020, 16:14 | #10 | 
| Участник | 
			
			А служба Windows Search не установлена.
		 | 
|  | 
|  10.03.2020, 20:11 | #11 | 
| Участник | 
			
			А проблема именно в питоне ? Просто в ShellExecute явного высвобождения дескриптора не происходит, что если добавить явный вызов CloseHandlе в конце метода ? Или, например, вместо ShellExecute, использовать функцию CreateProcess ? https://stackoverflow.com/questions/...execute-to-run 
				__________________ Sergey Nefedov | 
|  | 
|  11.03.2020, 17:47 | #12 | 
| Участник | 
			
			Я предложу альтернативное решение. два батча джоба #1. Делает экспорт из БД файликов. Имя файлика == RecId (Ну или как удобней будет для уникальной идентификации файлика к записи) Выполняет экспорт пачками по 100-1000 файликов за один раз Надо добавить чтобы он помечал запись как выгруженную, чтобы ее повторно не экспортировать. Питон смотрит на файловую папку inbound. Делает свою магию и складывает сконверченные картинки в папку outbound. Те которые не надо конвертить - удаляет. Из inbound тоже удаляет после обработки. #2. Батч которые время от времени сканирует папку outbound. Если файлики есть, то забирает их к себе в БД. Файлики удаляет. | 
|  | 
| Теги | 
| ax2012, ax4.0 | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| 2009 AX, Вставка в grid нескольких изображений | 17 | |||
| Обработка изображений в аксапте 3.0 | 1 | |||
| Обработка входящего НДС | 12 | |||
| Висит обработка фактуры | 12 | |||
| Суммарная обработка накладной | 1 | |||
| 
 |