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 № 1To:
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.