parallel.futures.as_completed()。等待所有线程完成,并且在线程完成任务时不产生结果

时间:2020-03-30 17:54:09

标签: python multithreading concurrent.futures

我不熟悉python中的多线程,当我尝试通过手头的任务来学习它时,遇到了以下特殊代码无法正常工作的特殊情况(如文档中所述)。 / p>

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())

我第一次提到的代码片段在哪里出错?

0 个答案:

没有答案