Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非守护进程python线程在';他们的任务完成了吗?_Python_Multithreading_Io - Fatal编程技术网

非守护进程python线程在';他们的任务完成了吗?

非守护进程python线程在';他们的任务完成了吗?,python,multithreading,io,Python,Multithreading,Io,上下文:我有一个简单的python脚本,每隔几秒钟就将一堆文件写入s3(~70-100)。因为它的I/O限制,所以我想线程化写过程,以便脚本执行得更好。我正在使用threading构建线程 问题:由于我的线程是a)非守护进程和b)它们只有一个任务要执行(写入文件),如果我循环我的线程列表并调用。join()它们会完成任务并优雅地退出吗?我甚至需要在这里调用join(),还是完成后就退出?我相信join()是一种方法,但由于我对python非常陌生,我不知道我不知道的是什么 以下是一些简化的代码供

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

问题:由于我的线程是a)非守护进程和b)它们只有一个任务要执行(写入文件),如果我循环我的线程列表并调用
。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是进行编写的类

Join确保主线程将等待,直到连接的线程完成其任务。有一个很好的ascii艺术


因此,最好在子线程执行I/O时使用join,以防止出现任何意外行为

Join确保主线程将等待,直到连接的线程完成其任务。有一个很好的ascii艺术


因此,最好在子线程执行I/O时使用join,以防止出现任何意外行为

对,但是线程完成任务后会发生什么情况?是否有任何机制可以确保没有任何东西像僵尸进程或垃圾收集那样四处飘浮?类似的东西?像其他方法一样处理,从堆栈中删除。因为我们讨论的是线程,所以不会有任何类似于僵尸进程的东西,因为正如您所说,它们完成了任务。但是,如果没有join,如果主线程退出,而另一个线程还没有完成,那么它们的堆栈将保持不变(不是很好)?是否有任何机制可以确保没有任何东西像僵尸进程或垃圾收集那样四处飘浮?类似的东西?像其他方法一样处理,从堆栈中删除。因为我们讨论的是线程,所以不会有任何类似于僵尸进程的东西,因为正如您所说,它们完成了任务。但是,如果没有join,如果主线程退出,而另一个线程尚未完成,那么它们的堆栈将保持不变(不好)。