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

2024-09-28 22:21:43 发布

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

我发现它非常有趣,但不知道为什么:我的一个python脚本在32位win 2003机器上运行毫不费力(CPU使用率为20%甚至更低),而在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)

Tags: 脚本机器newgetifqueueputcpu
1条回答
网友
1楼 · 发布于 2024-09-28 22:21:43

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

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

如果我是你,我要做的第一件事就是理清线程逻辑。类似于一个工作线程池的方法可能很适合这个问题。在

相关问题 更多 >