在64位操作系统上CPU使用率高的原因是什么?

时间:2012-05-04 15:38:18

标签: python multithreading mechanize

我发现它非常有趣但却不知道为什么:我的一个python脚本在32位win 2003机器(20%CPU使用率甚至更低)上毫不费力地运行,而确切地说相同的脚本几乎在64位win 2008机器上花费100%CPU 。这两台机器具有相同级别的硬件。

基本上,脚本使用threadingmechanize模块进行多线程处理,以从几十个网页中抓取特定结果。

无论如何,64位操作系统上CPU占用率高的原因是什么?

修改

在将多线程脚本从32位迁移到64位时,我实际上试图找到一些常见的注意事项。

好的,这就是代码:

def SpawnThreads(amounts, urls_queue, proxies_queue):

    for counter in range(amounts):
        new_thread = threading.Thread(target = CheckResults, args = (urls_queue, proxies_queue, ))
        new_thread.start()

def CheckResults(urls_queue, proxies_queue):
    if urls_queue.empty():
         return 1

    if proxies_queue.empty():
        return 1

    get url from urls_queue

    get proxy from proxies_queue

    get html source of url

    put proxy back to proxies_queue if everything's all right

    spawn_a_new_thread = threading.Thread(target = SpawnThreads, args = (1, urls_queue, proxies_queue)
    spawn_a_new_thread.start()

if __name__ == "__main__":
    put all urls into urls_queue
    put all proxies into proxies_queue

    SpawnThreads(100, urls_queue, proxies_queue)

1 个答案:

答案 0 :(得分:1)

真正跳出来的一件事是以循环方式产生其他线程的所有线程(SpawnThreads - > CheckResults - > SpawnThreads - > ... )。

即使每个线程在被称为other_thread.start()之后很快就会死掉,但不断产生线程很可能会成为瓶颈。

如果我是你,我要做的第一件事就是理清线程逻辑。像工作线程池这样的东西可能非常适合这个问题。