Python - 如何管理线程列表

时间:2016-05-30 11:35:34

标签: python multithreading

我正在使用 Python 2.7.6 线程模块

我对python线程很新。我正在尝试编写一个程序来从文件系统中读取文件并在我的数据库中存储一些哈希值。这是很多文件,我想在线程中做。就像每个以a开头的文件夹的一个线程一样,每个以b开头的文件夹都有一个线程。因为我想在线程中使用数据库连接,所以我不想一次生成26个线程。所以我希望有10个线程在运行,如果其中一个完成,我总是想开始一个新线程。

  • 主程序应该包含具有指定最大值的线程列表 线程数量(例如10)
  • 主程序应该启动10个线程
  • 当一个线程完成时,应通知主程序
  • 如果线程已完成,请启动新线程
  • 依此类推......直到工作完成并且每个线程都已完成

我不太确定主程序的外观如何。如何在没有大量开销的情况下管理这个线程列表?

1 个答案:

答案 0 :(得分:1)

我想告诉你python不能很好地管理多线程:你可能知道(或不知道)python附带一个全局解释器锁(GIL),它不允许真正的并发:事实上,一次只能执行一个线程。 (但是,由于机器的进程调度程序,您不会将执行视为顺序执行)

请点击此处了解详情:http://www.dabeaz.com/python/UnderstandingGIL.pdf

那就是说,如果你仍然想这样做,请看一下信号量:每个线程都必须获取它,如果你将这个锁初始化为10,那么一次只能获得10个线程它。 https://docs.python.org/2/library/threading.html#threading.Semaphore

希望有所帮助