Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 64位操作系统CPU使用率高的原因是什么?_Python_Multithreading_Mechanize - Fatal编程技术网

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

Python 64位操作系统CPU使用率高的原因是什么?,python,multithreading,mechanize,Python,Multithreading,Mechanize,我发现它非常有趣,但不知道为什么:我的一个python脚本在32位win 2003机器上轻松运行(CPU使用率为20%甚至更低),而在64位win 2008机器上,完全相同的脚本几乎花费100%的CPU。这两台机器的硬件水平相同。 基本上,该脚本是多线程的,使用线程化和机械化模块从几十个网页中获取特定结果 无论如何,64位操作系统CPU使用率高的原因是什么 编辑: 实际上,我在尝试寻找将多线程脚本从32位迁移到64位时的一些一般注意事项 好的,代码是这样的: def SpawnThreads(a

我发现它非常有趣,但不知道为什么:我的一个python脚本在32位win 2003机器上轻松运行(CPU使用率为20%甚至更低),而在64位win 2008机器上,完全相同的脚本几乎花费100%的CPU。这两台机器的硬件水平相同。

基本上,该脚本是多线程的,使用
线程化
机械化
模块从几十个网页中获取特定结果

无论如何,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)

真正跳出来的一件事是所有这些线程以循环方式生成其他线程(
生成线程
->
检查结果
->
生成线程
->
..

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


如果我是你,我要做的第一件事就是整理线程逻辑。工作线程池之类的东西可能很适合解决此问题。

两台机器上相同数量的内核和每个内核的线程?线程总是会伤害处理器。线程不会“伤害处理器”,只是会使处理器饱和。对于这样的任务,处理器的利用率不是100%有什么意义呢?Shane,尽可能多地发布你认为相关的代码。最需要的是操作系统规范。