Я новичок в многопоточности в python, и пока я пытался изучить его с помощью выполняемой задачи, я сталкиваюсь с этой специфической ситуацией, когда приведенный ниже код не работает должным образом (как описано в документах). .
def workerThread()
data= xyz
partData.append(data)
return(partData)
with ThreadPoolExecutor(max_workers=2) as executor:
results= { executor.submit(workerThread,driver,l): l for l in links_by_letters}
for future in as_completed(results):
print(future.result())
В соответствии с документами, future.result()
должен давать мне partData
один за другим, как и когда это доступно из каждого потока, который работает для него. Я использую два потока, как показано в коде для тестирования сейчас. Поведение, которое я наблюдаю при запуске, заключается в том, что partData
, который генерируется первым потоком, перезаписывается вторым потоком. Я имею в виду, я получаю два future.results()
из двух потоков, и оба этих результата имеют одинаковые данные (перезаписаны).
К вашему сведению: когда я запускаю тестовую программу, чтобы понять поток, я вижу, что он работает как согласно документации.
def workerThread(x):
print("doing job {}".format(x))
time.sleep(5)
JobListList=(21,22,23)
return x
def trigger():
print("starting job 1")
with ThreadPoolExecutor(max_workers=2) as executor:
JobList=(1,2,3,4,5)
results= { executor.submit(workerThread,job): job for job in JobList}
for future in as_completed(results):
print(future.result())
Где я ошибаюсь в своем первом упомянутом фрагменте?