python线程模块是否加快了执行时间?

2024-04-20 12:44:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想做以下几点来减少执行时间:

  1. 获取员工id号
  2. 把身份证号码分成10组
  3. 同时启动10个线程
  4. 使每个线程使用10个雇员id组中的1个,并获取这些雇员的信息 从数据库到单独的词典
  5. 最后,把这10本字典合并起来

有可能吗?这种方法能将执行时间减少10倍吗?你知道吗


Tags: info脚本信息id数据库for字典格式
1条回答
网友
1楼 · 发布于 2024-04-20 12:44:12

我觉得你把线程并发搞混了。你知道吗

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

并发性是指当您创建多个线程时,不同的线程被分配给处理器中的不同内核。当然,这取决于硬件(您需要一个多核处理器来完成)。你知道吗

当然,Python的threading模块允许创建多个线程;在理想情况下,它将自动处理并发性。但是由于“全局解释器锁”,默认的Python解释器CPython不允许本机并发。(请参见第17.1.3节标题上方的this pagethis SO post以获取有关GIL的更多信息)事实上,如您所建议的那样使用threading甚至可能会使执行变慢(请参见here)。你知道吗

我还没有用Python实现并发,但是我建议您检查一下^{}模块作为一个可能的解决方案。你知道吗

相关问题 更多 >