Wykonaj wiele wątków jednocześnie
Aktualny kod to:
def export_data(file):
<runs the db2 database command to export tables to file>
def export_to_files(yaml):
logger = logging.getLogger("export_to_files")
thread1 = threading.Thread(target=export_data, args=[out_file1])
thread1.start()
thread2 = threading.Thread(target=export_data, args=[out_file2])
thread2.start()
thread1.join()
thread2.join()
def main():
export_to_files()
if __name__ == "__main__":
main()
Moje zrozumienie było takiejoin()
blokuje tylko wywołujący wątek. Jednak nie zdawałem sobie z tego sprawythread1.join()
nawet się zablokujethread2
od wykonania, zasadniczo sprawiając, że kod uruchamia tylko 1 wątek, tj.thread1
.
Jak mogę wykonać oba wątki jednocześnie, podczas gdy główny wątek czeka na zakończenie obu?
EDIT: Stoję poprawiony, 2 wątki działają, ale wydaje się, że tylko 1 wątek faktycznie „robi” rzeczy w danym momencie.
Aby rozwinąć dalej,callable_method
czyta dane z bazy danych i zapisuje do pliku. Podczas gdy teraz widzę 2 pliki aktualizowane (każdy wątek zapisuje się w oddzielnym pliku), jeden z plików nie jest aktualizowany przez dłuższy czas, podczas gdy drugi plik jest aktualny co do aktualnego czasu.
JestNie używany obiekt połączenia. Zapytania są uruchamiane z interfejsu wiersza komend db2.