1

上下文:我有一个简单的 python 脚本,每隔几秒就会将一堆文件写入 s3 (~70-100)。因为它的 I/O 绑定,我想线程化写入过程,以便脚本执行得更好。我threading用来构建我的线程。

问题:由于我的线程是 a) 非守护进程和 b) 它们只有 1 个任务要执行(写入文件),如果我遍历我的线程列表并调用.join()它们,它们会完成任务并优雅地退出吗?我什至需要join()在这里打电话还是他们完成后会退出?我相信join() 是去这里的方式,但由于我对 python 很陌生,我不知道我不知道什么......

这里有一些简化的代码供参考:

buildOutput() #calls the section below 
for thread in threads:
   thread.join()
time.sleep(60)

调用:

  for item in out[fileRoot]: 
        #write individiual files
        key = findKey(item, FILE_KEY)
        full_key = FILE_PATH + str(key) + FILE_TYPE
        t = FileWriter(item, full_key)
        t.start()
        threads.append(t) #global threads list for the script

其中 FileWriter 是进行写入的类。

4

1 回答 1

1

Join 确保主线程将等待直到加入的线程完成其任务。这里有一个很好的 ascii 艺术。

因此,当您的子线程执行 I/O 时,您最好使用 join 以防止任何意外行为。

于 2013-07-22T17:08:56.313 回答