Muszę skonfigurować folder obserwacyjny, który uruchamia skrypt dla każdego dodanego elementu. Ale skrypt może potrwać 10 minut lub dłużej, aby przetworzyć pojedynczy element.
To, co zrobiłem, to umieszczenie tego kodu na początku mojego skryptu, który stale obserwuje folder, a następnie działa, gdy coś zostanie dodane:
set watchFolderAlias to (POSIX file watchFolder as alias)
set r to {}
repeat
tell application "Finder" to set r to ¬
(sort (get files of watchFolderAlias whose kind is "alias") ¬
by creation date)
if (count of r) ≠ 0 then
do(first item of r as alias)
end if
delay 5
end repeat
on do(x)
(* do 10 minutes of stuff with x *)
end do
... a potem po prostu działam. Ale jest to nieporęczne i niewygodne.
Ale jeśli dołączę te elementy do()
jako akcję folderu, uruchomi nową instancję, gdy tylko element zostanie dodany ... prawda?
Czy brakuje mi bardziej eleganckiego rozwiązania?
(Aby wyjaśnić: jeśli do folderu zostanie dołączony skrypt akcji folderu, skrypt ten jest uruchamiany wiele razy, raz za każdym razem, gdy dodajesz elementy do folderu, niezależnie od tego, czy jest już uruchomione inne wystąpienie tego skryptu. m próbuję tego uniknąć. Na przykład, jeśli 10 elementów zostanie upuszczonych do folderu obserwacyjnego, a następnie, podczas gdy pierwsze 10 elementów będzie nadal przetwarzanych, kolejne 5 elementów zostanie upuszczonych, spowoduje to uruchomienie drugiej instancji skryptu).
Jedyną inną rzeczą, jaką mogę wymyślić, jest utrzymanie pliku „statusu”, który zostanie ustawiony na „zajęty” przez skrypt i „bezczynny” po zakończeniu przetwarzania, tak aby inne instancje skryptu czekały na „ stan bezczynności ... ale jest to również niezręczne.