python线程模块会加快执行时间吗?

时间:2016-09-15 16:13:42

标签: python database multithreading

我有一个包含员工信息的数据库。我有4000名员工。每位员工都有一个唯一的识别号码。 我尝试使用python脚本从数据库中获取每个员工的员工信息。对于1名员工,获取信息的执行时间为1秒。对于4000名员工,它会4000秒(67分钟,谁愿意等待那么久?)。 员工信息应按以下格式存储在字典中:

infos = {"ID1": ["info for employee 1"], "ID2": ["info for employee 2"], ... }

我正在考虑采取以下措施来缩短执行时间:

  1. 获取员工ID号
  2. 将ID号分为10组
  3. 同时启动10个帖子
  4. 让每个帖子使用10个员工ID组中的1个并获取这些员工'信息 从数据库到单独的词典
  5. 最后,结合这10个词典
  6. 有可能吗?这种方法会将执行时间减少10倍吗?

1 个答案:

答案 0 :(得分:0)

我认为您将线程并发混淆。

线程是简单地同时使用多个执行线程的行为。这并不意味着多个操作同时完成......您的处理器仍然必须在线程之间切换。当您期望等待很长时间来完成操作(例如读取大文件)并且您希望在此期间发生其他事情(例如,打印进度条)时,此技术非常有用。

并发是指您创建多个线程,并且不同的线程被分配给处理器中的不同核心。当然,这取决于硬件(您需要多核处理器来完成它)。

Python的threading模块允许创建多个线程,当然;在理想的世界中,它会自动处理并发。但是默认的Python解释器CPython由于“全局解释器锁”而不允许本机并发。 (有关GIL的详细信息,请参阅第17.1.3节标题上方的this pagethis SO post。)实际上,使用threading就像你建议的那样甚至可能会使你的执行速度变慢 / em>(见here)。

我没有在Python中进行并发,但我建议您查看multiprocessing模块作为可能的解决方案。