我的工具的Python线程或多处理程序'

时间:2015-08-29 13:37:45

标签: python multithreading

我创建了一个脚本:

从.txt(约5K)

导入IP列表

连接到REST API并基于IP(每个IP的Web日志)执行查询

从API返回数据,并对数据进行一些计算

计算结果写入.csv

目前它真的很慢,因为它一次需要一个IP然后进入下一个IP。 我可能错了,但根据我对线程或多处理的理解,我可以有3-4个线程,每个线程都在做IP,这将大大提高工具的速度。我的理解是否正确,是否应该为我的任务寻找线程或多处理?

任何帮助都会令人惊讶

随机信息,运行python 2.7.5,Win7有足够的资源。

2 个答案:

答案 0 :(得分:1)

使用多处理,一种原始的方法可以将文件分成5个相等的部分并将其分配给5个不同的进程将其结果写入5个不同的文件,当所有进程完成后,您将合并结果。

你可以在Python线程中使用相同的逻辑而不会有太多复杂的问题。并且可能不会有任何区别,因为瓶颈可能是API。所以最后你选择哪种方法并不重要。

但有两件事情可以考虑:

  • 使用线程,你不是真正使用多个CPU,因此你有“浪费的资源”
  • 使用多处理将使用多个处理器,但在启动时它会更重...因此,如果脚本需要经常运行,您将从永不停止脚本并保持进程保持活跃状态​​中受益。

由于您提供的有关使用此脚本(或更好说程序)的方案的信息有限,因此很难说哪种方法更好。

答案 1 :(得分:1)

multiprocessing绝对是前进的方式。您可以启动一个读取IP并将它们放在multiprocessing.Queue中的进程,然后进行从该队列读取的几个进程(取决于可用资源),连接到API并发出请求。这些请求应该并行进行,如果API可以处理这些请求,您的程序应该更快完成。如果计算复杂且耗时,则可以将API的输出放入另一个Queue,从其他进程开始,可以读取它们并进行计算和存储结果。您可能必须启动收集器流程来收集最终输出。

您可以在此stackoverflow question中找到此类问题的示例代码。如果您需要进一步的解释或示例代码,请在评论中告诉我。