2017-06-05 27 views
6

Mam trochę kodu Python3 działa wewnątrz pętli zdarzeń asyncio.asyncio wersja `os.chmod` w Pythonie

Chcę korzystać z funkcjonalności os.chmod(...), ale najlepiej byłoby, gdyby była to wersja bez blokady, dzięki czemu będę mógł używać await os.chmod(...) i unikam blokowania wywołania systemowego.

Nie sądzę, że istnieją dostępne biblioteki, które dostarczają tę funkcjonalność, przynajmniej z tego, co widzę.

Co zrobić, aby wdrożyć niezablokowanie od os.chmod(...) od podstaw? Co więcej, czy istnieje już istniejące rozwiązanie?

+0

Dla kontekście mam realizuje proces roboczy Gunicorn, który wykorzystuje asyncio. Gunicorn używa wirującego statusu "fchmod" do sygnalizowania żywotności procesu roboczego. https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/workertmp.py –

Odpowiedz

5

Systemy UNIX nie zaimplementowały asynchronicznego interfejsu API dla systemu chmod. ten sposób najlepiej można zrobić, to uruchomić go w puli wątków:

await loop.run_in_executor(None, os.chmod, fname, mode) 
+0

Perfect - wielkie dzięki. –

+0

Czy miałeś na myśli: 'await loop.run_in_executer (None, os.chmod, fname, mode)'? –

+0

@YuvalPruss Czy miałeś na myśli 'await loop.run_in_executor (None, os.chmod, fname, mode)'? ;) –