/ / Błąd Pythona i błąd wieloprocesowy? - python, linux, wielowątkowość, wieloprocesowość

Python threading & multiprocessing error? - python, linux, wielowątkowość, wieloprocesowość

Jest threading.Timer i multiprocessing.Process spawnować inny proces, który jest niezależny od innych osób, które zajmują się tym procesem? Przykład mój kod znajduje się poniżej poniższego, zakładając, że idzie o jedną rundę if oświadczenie, które powoduje wykonanie multiprocessing.Process i threading.Timer, a teraz jest 20 sekund, więc nadal czeka na 40 sekund, aby uzyskać kod, ale jeśli zostanie wykonany w if oświadczenie ponownie, czy dostanie jakieś błędy czy coś? czy przekaże drugą rundę var do myFunction2 i wykonaj innego myFunction3 na szczycie pierwszej rundy?

def myFunction3():
#some stuffs

def myFunction2(a,b):
time.sleep(60)
subprocess.Popen([.....],....) #with a var
subprocess.Popen([.....],....) #with b var

def myFunction():
if data in a:
subprocess.Popen([.....],....)
p = multiprocessing.Process(target=myFunction2,args=(a,b))
p.start()
threading.Timer(60, myFunction3).start()

if __name__=="__main__":
while True:
myFunction()

Odpowiedzi:

2 dla odpowiedzi № 1

To:

p = multiprocessing.Process(target=myFunction2,args=(a,b))
p.start()

utworzy nowy proces i uruchomi funkcję myFunction2 w tym procesie.

To:

threading.Timer(60, myFunction3).start()

utworzy nowy wątek w bieżącym procesie i uruchomi funkcję myFunction3 w tym wątku.

Proces może zawierać więcej niż jeden wątek, z których wszystkie mają tę samą przestrzeń adresową, ale procesy nie dzielą ze sobą tej samej przestrzeni adresowej.


2 dla odpowiedzi nr 2

Z tym kodem jest podstawowy problem: multiprocessing.Process używa fork () do tworzenia nowych procesów (chyba że używasz Windows). Ogólnie przyjmuje się, że używanie fork () jest złą praktyką w aplikacji wielowątkowej; tutaj jest dobry artykuł.

Powiedziawszy to, powinno być możliwy aby to działało, jeśli jesteś ostrożny.