Als Follow-up auf this question, ich habe eine triviale Skript, das ein threadpoolexecutor
beginnt in einer json
Datei zu lesen. Dabei will ich von 1 bis 9 mit einer for
Schleife zählen. Aus irgendeinem Grund, obwohl ich executor.shutdown(wait=False)
verwendet, blockiert es immer noch und wartet auf die Ausführung der read_employees
-Methode.ThreadPoolExecutor Verwendung ohne
bis Nach der documentation:
Wenn Wartezeit ist falsch, dann wird diese Methode sofort zurück, und die mit dem Testamentsvollstrecker zugehörigen Ressourcen freigegeben werden, wenn alle ausstehenden Futures getan ausführen
import concurrent.futures
import json
import time
def read_employees(read_file):
with open(read_file) as f_obj:
employees = json.load(f_obj)
for emp in employees:
print(emp)
time.sleep(3)
def start_thread():
filename = 'employee.json'
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
executor.submit(read_employees, filename)
executor.shutdown(wait=False)
def print_number():
for num in range(1,10):
time.sleep(2)
print(num)
start_thread()
print_number()
Wenn ich dies tun würde:
def read_employees(read_file):
with open(read_file) as f_obj:
employees = json.load(f_obj)
for emp in employees:
time.sleep(5)
print(emp)
def print_number():
for num in range(1,10):
print(num)
filename = 'employee.json'
empThread = threading.Thread(target=read_employees, args=(filename,))
empThread.start()
print_number()
Es zählt zuerst von 1 bis 9 und druckt dann die Mitarbeiter aus, die Verspätung ist wegen des Schlafes beim Lesen der Mitarbeiter. Wie so:
1
2
3
4
5
6
7
8
9
[email protected]
[email protected]
Wie erreiche ich die gleiche Leistung mit dem threadpoolexecutor
, ohne zu blockieren?
diesem Grund habe ich die 'wait' auf' false' gesetzt, aber es gibt immer noch, als ob es blockiert. –