Oglądasz folder, który przetwarza tylko jeden element na raz?

1

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.

Dan
źródło

Odpowiedzi:

1

Wypróbuj Hazel z https://www.noodlesoft.com

Nie miałem żadnych procesów, które działałyby tak długo, ale z mojego doświadczenia wynika, że ​​Hazel zawsze wydaje się działać sekwencyjnie na plikach i nie rozpocznie nowego procesu, dopóki stary nie zostanie ukończony.

To nieoceniona aplikacja na komputery Mac, IMO. Używam go wyłącznie zamiast akcji folderów. Jest to aplikacja płatna, ale dostępna jest bezpłatna, w pełni funkcjonalna wersja demonstracyjna. Deweloper jest również bardzo pomocny, a aplikacja jest dobrze utrzymana. Wysoce rekomendowane.

Myślę, że twoją jedyną alternatywą jest plik blokady, co jest niezręczne, jak wspomniałeś.

TJ Luoma
źródło
Używam Hazel od lat; To jest zajebiste. Ale nie zdawałem sobie sprawy, że przetwarzałem elementy pojedynczo, gdy używałem zewnętrznego Applescript. Będę musiał to przetestować. Dzięki. (Ale nadal wolałbym rozwiązanie „natywne”)
Dan.