我有一个包含员工信息的数据库。我有4000名员工。每位员工都有一个唯一的识别号码。
我尝试使用python脚本从数据库中获取每个员工的员工信息。对于1名员工,获取信息的执行时间为1秒。对于4000名员工,它会4000
秒(67分钟,谁愿意等待那么久?)。
员工信息应按以下格式存储在字典中:
infos = {"ID1": ["info for employee 1"], "ID2": ["info for employee 2"], ... }
我正在考虑采取以下措施来缩短执行时间:
有可能吗?这种方法会将执行时间减少10倍吗?
答案 0 :(得分:0)
我认为您将线程与并发混淆。
线程是简单地同时使用多个执行线程的行为。这并不意味着多个操作同时完成......您的处理器仍然必须在线程之间切换。当您期望等待很长时间来完成操作(例如读取大文件)并且您希望在此期间发生其他事情(例如,打印进度条)时,此技术非常有用。
并发是指您创建多个线程,并且不同的线程被分配给处理器中的不同核心。当然,这取决于硬件(您需要多核处理器来完成它)。
Python的threading
模块允许创建多个线程,当然;在理想的世界中,它会自动处理并发。但是默认的Python解释器CPython由于“全局解释器锁”而不允许本机并发。 (有关GIL的详细信息,请参阅第17.1.3节标题上方的this page和this SO post。)实际上,使用threading
就像你建议的那样甚至可能会使你的执行速度变慢 / em>(见here)。
我没有在Python中进行并发,但我建议您查看multiprocessing
模块作为可能的解决方案。