Bardzo prosty skrypt.

Test.py

import temp
temp.start()

Temp.py.py.

import threading, time
f=open("output.txt","w")
def temp():
    for i in range(5):
        f.write(str(i))
        time.sleep(5)
    f.close()
def start():
    t=threading.Thread(target=temp)
    t.setDaemon(True)
    t.start()

Spodziewałem się nici Daemon, aby wypełnić jako proces główny {X0}} natychmiast wychodzi. Ale daemon Wychodzi z głównym i nie działa jak daemon.

3
vks 8 wrzesień 2017, 22:11

2 odpowiedzi

Najlepsza odpowiedź

Jest to opisane w szczegółach w dokumentacji Python w

https://docs.Python.org/3/library/threading.html.

Najbardziej odpowiednie bity to:

Nici może być oznaczony jako "gwint demona". Znaczenie tej flagi jest to, że cały program Pythona wychodzi, gdy pozostały tylko wątki demona.

I

Daemon Nici są nagle zatrzymane przy zamykaniu. Ich zasoby (takie jak otwarte pliki, transakcje bazy danych itp.) Nie mogą być prawidłowo uwalniane.

Przeciążenie terminu "Daemon" i kontortionów negacji mogą sprawić, że to nieco mylące, ale to, co się sprowadza, jest: Program Python wychodzi tylko tylko po wszystkich jego niciach, z wyjątkiem wątków demona które są po prostu zakończone, jeśli nie pozostanie żadnych innych wątków nie-demona. W twoim przypadku oznacza to, że program wychodzi za zabicie wątku demona, zanim ma szansę zrobić wszystko (lub odwrotnie, nie wyjmuje, dopóki nie zostanie zakończona wątku, jeśli jesteś {x0}}).

3
pvg 8 wrzesień 2017, 19:35

Uzupełnienie Ładna odpowiedź PVG, możliwe rozwiązanie do pytania jest użycie Dołącz (), w swoim przypadku:

t.join()

Więcej o dołączeniu do "Jakie jest użycie Dołącz () w gwintowaniu Pythona "

Ładny przewodnik wyjaśniający w praktyczny sposób można znaleźć w: https://realpython.com/ intro-to-python-gwinting /

0
xCovelus 31 styczeń 2020, 10:23