Mam skrypt i chcę, aby jedna funkcja działała w tym samym czasie, co druga.
Przykładowy kod, na który patrzyłem:
import threading
def MyThread (threading.thread):
# doing something........
def MyThread2 (threading.thread):
# doing something........
MyThread().start()
MyThread2().start()
Mam problem z uruchomieniem tego. Wolałbym, aby to działało za pomocą funkcji wątkowej, a nie klasy.
Oto działający skrypt:
from threading import Thread
class myClass():
def help(self):
os.system('./ssh.py')
def nope(self):
a = [1,2,3,4,5,6,67,78]
for i in a:
print i
sleep(1)
if __name__ == "__main__":
Yep = myClass()
thread = Thread(target = Yep.help)
thread2 = Thread(target = Yep.nope)
thread.start()
thread2.start()
thread.join()
print 'Finished'
python
multithreading
chrissygormley
źródło
źródło
exiting
jakoexciting
, co i tak uważałem za bardziej odpowiednie.Z Twoim kodem jest kilka problemów:
Jeśli naprawdę chcesz to zrobić tylko z funkcjami, masz dwie możliwości:
Z gwintowaniem:
Z gwintem:
Dokument dotyczący thread.start_new_thread
źródło
thread.start_new_thread(function, args[, kwargs])
Próbowałem dodać kolejne sprzężenie () i wygląda na to, że zadziałało. Oto kod
źródło
Możesz użyć
target
argumentu wThread
konstruktorze, aby bezpośrednio przekazać funkcję, która zostanie wywołana zamiastrun
.źródło
Czy nadpisałeś metodę run ()? Jeśli zastąpiłeś
__init__
, czy upewniłeś się, że dzwonisz do bazythreading.Thread.__init__()
?Czy po uruchomieniu dwóch wątków główny wątek kontynuuje pracę w nieskończoność / blokowanie / łączenie w wątkach podrzędnych, tak aby wykonywanie głównego wątku nie kończyło się przed zakończeniem zadań przez wątki podrzędne?
I wreszcie, czy otrzymujesz nieobsłużone wyjątki?
źródło
__init__
. Czy run () jest zatem wymagane? Dziękidef MyThread ( threading.thread )
... Zakładałem, że to były definicje klas. Jeśli zamierzasz podklasę threading.thread i zainicjować obiekt wątku z argumentemtarget=None
lub go pominąćtarget
, wymagana jest implementacja run (). W przeciwnym razie, jeśli chcesz po prostu uruchomić proste zadanie w innym wątku, zobacz odpowiedź jkp.Python 3 ma możliwość uruchamiania zadań równoległych . To ułatwia nam pracę.
Posiada pule wątków i pule procesów .
Poniżej przedstawiono wgląd:
Przykład ThreadPoolExecutor
Inny przykład
źródło