以一种非常天真的方式,我试图保存到一个gzip文件。 我在一个单独的线程中将该文件的chuncks添加到队列中,因为gzip压缩非常昂贵。我在internet上找到的使用多线程的最简单解决方案是定义一个新函数,该函数通过以下方式读取队列:
def savegz(filegz, workQueue):
while True:
user_list = workQueue.get()
print 'start'
for chunck in user_list:
filegz.writelines(chunck)
print 'end'
workQueue.task_done()
...
workQueue = Queue(0)
thread1 = Thread(target=savegz, args=(filegz, workQueue))
thread1.setDaemon(True)
thread1.start()
...
for user_list in something(a):
workQueue.put(user_list)
...
workQueue.join()
filegz.close()
但这样它永远不会打印“结束”。 我知道这不是保存到文件的好方法,但我认为问题是我从不返回filegz。但我不想退回,因为这样我就退出了,而这是真的。 我见过收益率函数,但我认为它行不通
我认为
thread1
不应该是守护进程,或者你应该join
在thread1
上您需要一种方法来通知
thread1
没有其他项目。您可以在队列上放置一个特殊值来表示:相关问题 更多 >
编程相关推荐