运行python 获取cpu核数的时候为什么出现了 cpu 使用超过 100%的情况

不正当使用HashMap导致cpu 100%的问题追究 - ImportNew
因最近hashmap误用引起的死循环又发生了一些案例,写了一篇blog ,看了一下,大家的分析如出一辙。这篇blog也是好几年前写的了,之前在平台技术部的博客上贴过,随着组织结构的调整,那个博客可能不再维护,把这篇文章在这儿也保存一下。
李鹏同学在blog里写了篇关于HashMap死锁模拟的文章: http://blog.csdn.net/madding/archive//5838477.aspx 做个纠正,那个不是死锁问题,而是死循环。
这个问题,我们以前讨论过。 校长之前的和淘宝的毕玄的《分布式Java应用:基础与实践》一书中都提到过 velocity导致cpu 100% 的bug,起因是HashMap的使用不当所致。
在之前的邮件列表里,校长提出过这个问题,当时我没仔细看,不清楚这个问题究竟是对 HashMap的误用,还是HashMap的潜在问题, 当时感觉不太可能是HashMap自身的问题,否则问题大了。应该是属于在并发的场景下错误的 使用了HashMap。昨天看了李鹏的blog后,觉得这个事情还是应该搞清楚一下;虽然我推测是链表形成闭环,但 没有去证明过。从网上找了一下: http://blog.csdn.net/autoinspired/archive//2662290.aspx 里面也有提到:
产生这个死循环的根源在于对一个未保护的共享变量 — 一个”HashMap”数据结构的操作。当在 所有操作的方法上加了”synchronized”后,一切恢复了正常。检查”HashMap”(Java SE 5.0)的源 码,我们发现有潜在的破坏其内部结构最终造成死循环的可能。在下面的代码中,如果我们使得 HashMap中的entries进入循环,那 么”e.next()”永远都不会为null。
不仅get()方法会这样,put()以及其他对外暴露的方法都会有这个风险,这算jvm的bug吗?应该说不是的,这个现象很早以前就报告出来了(详细见: /bugdatabase/view_bug.do?bug_id=6423457)。Sun的工程师并不认为这 是bug,而是建议在这样的场景下应用”ConcurrentHashMap”,在构建可扩展的系统时应将这点 纳入规范中。
这篇翻译提到了对HashMap的误用,但它没有点破HashMap内部结构在什么样误用情况下怎么被 破坏的;我想要一个有力的场景来弄清楚。再从李鹏的blog来看,用了2个线程来put就模拟出来了,最后堆栈是在 transfer 方法上(该方法是数据扩容时将数据从旧容器转移到新容器)。 仔细分析了一下里面的代码,基本得出了原因,证明了我之前的推测。
假设扩容时的一个场景如下(右边的容器是一个长度 2 倍于当前容器的数组) 单线程情况。
我们分析数据转移的过程,主要是链表的转移。
执行过一次后的状态:
最终的结果:
两个线程并发情况下,扩容时可能会创建出 2 个新数组容器
顺利的话,最终转移完可能是这样的结果
但并发情况下,出现死循环的可能场景是什么呢? 还要详细的分析一下代码,下面的代码中重点在 do/while 循环结构中(完成链 表的转移)。
// 扩容操作,从一个数组转移到另一个数组
void transfer(Entry[] newTable) {
Entry[] src =
int newCapacity = newTable.
for (int j = 0; j & src. j++) {
Entry&K,V& e = src[j];
if (e != null) {
Entry&K,V& next = e. //假设第一个线程执行到这里
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] =
} while (e != null); // 可能导致死循环
2 个线程并发情况下, 当线程 1 执行到上面第 9 行时,而线程 2 已经完成了一 轮 do/while 操作,那么它的状态如下图:
(上面的数组时线程 1 的,已经完成了链表数据的转移;下面的是线程 2 的,它 即将开始进行对链表数据的转移,此时它记录 E1 和 E2 的首位已经被线程 1 翻 转了)
后续的步骤如下:
1) 插入 E1 节点,E1 节点的 next 指向新容器索引位置上的值(null 或 entry)
2) 插入 E2 节点,E2 的 next 指向当前索引位置上的引用值 E1
3)因为 next 不为 null,链表继续移动,此时 2 节点之间形成了闭环。造成了 死循环。
上面只是一种情况,造成单线程死循环,双核 cpu 的话占用率是 50%,还有导致 100%的情况,应该也都是链表的闭环所致。
最终,这并不是 HashMap 的问题,是使用场景的不当,在并发情况下选择非线程 安全的容器是没有保障的。
相关阅读:,
我又更新了几篇,保留原文链接即可:http://blog.csdn.net/u/a...
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2017 ImportNew电脑cpu使用率为什么老是使用100%,并且电脑运行很慢?
电脑cpu使用率为什么老是使用100%,并且电脑运行很慢?
09-01-02 &
一、正常软件造成的CPU占用率100%  首先,如果是从开机后就发生上述情况直到关机。那么就有可能是由某个随系统同时登陆的软件造成的。可以通过运行输入“MSCONFIG”打开“系统实用配置工具”,进入“启动”选项卡。接着,依次取消可疑选项前面的对钩,然后重新启动电脑。反复测试直到找到造成故障的软件。或者可以通过一些优化软件如“优化大师”达到上述目的。另:如果键盘内按键卡住也可能造成开机就出现上述问题。  如果是使用电脑途中出项这类问题,可以调出任务管理器(WINXP CTRL+ALT+DEL WIN2000 CTRL+SHIFT“ESC),进入”进程“选项卡,看”CPU“栏,从里面找到占用资源较高的程序(其中SYSTEM IDLE PROCESS是属于正常,它的值一般都很高,它的作用是告诉当前你可用的CPU资源是多少,所以它的值越高越好)通过搜索功能找到这个进程属于哪个软件。然后,可以通过升级、关闭、卸载这个软件或者干脆找个同类软件替换,问题即可得到解决。  二、病毒、木马、间谍软件造成的CPU占用率100%  出现CPU占用率100% 的故障经常是因为病毒木马造成的,比如震荡波病毒。应该首先更新病毒库,对电脑进行全机扫描 。接着,在使用反间谍软件AD—AWARE,检查是否存在间谍软件。论坛上有不少朋友都遇到过SVCHOST.EXE占用CPU100%,这个往往是中毒的表现。SVCHOST.EXE WINDOWS中的系统服务是以动态链接库(DLL)的形式实现的,其中一些会把可执行程序指向SVCHOST.EXE,由它调用相应服务的动态链接库并加上相应参数来启动服务。正是因为它的特殊性和重要性,使它更容易成为了一些病毒木马的宿主。  三、典型案例  1、超线程导致占用率过高并上网死机。 这类故障的共同原因就是都使用了具有超线程功能的P4 CPU。查找了一些资料都没有明确的原因解释。据一些网友总结超线程似乎和天网防火墙有冲突,可以通过卸载天网并安装其他防火墙解决,也可以通过在BIOS中关闭超线程功能解决。  2、单击AVI视频文件后造成CPU使用率过高。 在WINDOWS XP中,单击一个较大的AVI视频文件后,可能会出现系统假死现象,并且造成EXPLOERE.EXE进程的使用率100%,这是因为系统要先扫描该文件,并检查文件所有部分,建立索引。如果文件较大就会需要较长时间并造成CPU占用率100%。解决方法:右键单击保存视频文件的文件夹,选择”属性—》常规—》高级“,去掉”为了快速搜索,允许索引服务编制该文件夹的索引“前面复选框的对钩即可。  3、杀毒软件造成CPU使用率过高。 现在的杀毒软件一般都加入了,对网页、邮件、个人隐私的即时监空功能,这样无疑会加大系统的负担。比如:在玩游戏的时候,会非常缓慢。关闭该杀毒软件是解决得最直接办法。  4、处理较大的WORD文件时出现CPU使用率过高。 上述问题一般还会造成电脑假死,这些都是因为WORD的拼写和语法检查造成的,只要打开WORD的“工具—选项”,进入“拼写和语法”选项卡,将其中的“键入时检查拼写”和“键入时检查语法”两项前面的复选框中的钩去掉即可。  5、网络连接导致CPU使用率占用100%。 当你的WINDOWS2000/XP作为服务器时,收到来自端口445上的连接请求后,系统将分配内存和少量CPU资源来为这些连接提供服务,当负荷过重,就会出现上述情况。要解决这个问题可以通过修改注册表来解决,打开注册表,找到HKEY—LOCAL—MACHNE\SYSTEM\CURRENTCONTROLSET\SERVICES\LANMANSERVER,在右面新建一个名为&MAXWORKITEMS&的DWORD值.然后双击该值,如果你的电脑有512以上内存,就设置为&1024&,如果小于512,就设置为256.  6、右击文件导致CPU使用率100%。 在点击文件时,如果不先用左键选中而直接用右键,就会导致CPU占用率100%。解决办法:右击桌面选择“属性”,在外观设置中单击“效果”按钮,在打开的窗口中取消“为菜单和工具提示使用下列过渡效果”的选项即可。  7、其他 一些不完善的驱动程序也可以造成CPU使用率过高。 经常使用待机功能,也会造成系统自动关闭硬盘DMA模式。这不仅会使系统性能大幅度下降,系统启动速度变慢,也会使是系统在运行一些大型软件和游戏时CPU使用率100%,
请登录后再发表评论!
一、正常软件造成的CPU占用率100% 首先,如果是从开机后就发生上述情况直到关机。那么就有可能是由某个随系统同时登陆的软件造成的。可以通过运行输入“msconfig”打开“系统实用配置工具”,进入“启动”选项卡。接着,依次取消可疑选项前面的对钩,然后重新启动电脑。反复测试直到找到造成故障的软件。或者可以通过一些优化软件如“优化大师”达到上述目的。另:如果键盘内按键卡住也可能造成开机就出现上述问题。 如果是使用电脑途中出项这类问题,可以调出任务管理器(WINXP CTRL+ALT+DEL WIN2000 CTRL+SHIFT“ESC),进入”进程“选项卡,看”CPU“栏,从里面找到占用资源较高的程序(其中SYSTEM IDLE PROCESS是属于正常,它的值一般都很高,它的作用是告诉当前你可用的CPU资源是多少,所以它的值越高越好)通过搜索功能找到这个进程属于哪个软件。然后,可以通过升级、关闭、卸载这个软件或者干脆找个同类软件替换,问题即可得到解决。 二、病毒、木马、间谍软件造成的CPU占用率100% 出现CPU占用率100% 的故障经常是因为病毒木马造成的,比如震荡波病毒。应该首先更新病毒库,对电脑进行全机扫描 。接着,在使用反间谍软件Ad—Aware,检查是否存在间谍软件。论坛上有不少朋友都遇到过SVCHOST.EXE占用CPU100%,这个往往是中毒的表现。SVCHOST.EXE Windows中的系统服务是以动态链接库(DLL)的形式实现的,其中一些会把可执行程序指向SVCHOST.EXE,由它调用相应服务的动态链接库并加上相应参数来启动服务。正是因为它的特殊性和重要性,使它更容易成为了一些病毒木马的宿主。 三、典型案例 1、超线程导致占用率过高并上网死机。 这类故障的共同原因就是都使用了具有超线程功能的P4 CPU。我查找了一些资料都没有明确的原因解释。据一些网友总结超线程似乎和天网防火墙有冲突,可以通过卸载天网并安装其他防火墙解决,也可以通过在BIOS中关闭超线程功能解决。 2、单击AVI视频文件后造成CPU使用率过高。 在Windows XP中,单击一个较大的AVI视频文件后,可能会出现系统假死现象,并且造成EXPLOERE.EXE进程的使用率100%,这是因为系统要先扫描该文件,并检查文件所有部分,建立索引。如果文件较大就会需要较长时间并造成CPU占用率100%。解决方法:右键单击保存视频文件的文件夹,选择”属性—》常规—》高级“,去掉”为了快速搜索,允许索引服务编制该文件夹的索引“前面复选框的对钩即可。 3、杀毒软件造成CPU使用率过高。 现在的杀毒软件一般都加入了,对网页、邮件、个人隐私的即时监空功能,这样无疑会加大系统的负担。比如:在玩游戏的时候,会非常缓慢。关闭该杀毒软件是解决得最直接办法。 4、处理较大的WORD文件时出现CPU使用率过高。 上述问题一般还会造成电脑假死,这些都是因为WORD的拼写和语法检查造成的,只要打开WORD的“工具—选项”,进入“拼写和语法”选项卡,将其中的“键入时检查拼写”和“键入时检查语法”两项前面的复选框中的钩去掉即可。 5、网络连接导致CPU使用率占用100%。 当你的Windows2000/xp作为服务器时,收到来自端口445上的连接请求后,系统将分配内存和少量CPU资源来为这些连接提供服务,当负荷过重,就会出现上述情况。要解决这个问题可以通过修改注册表来解决,打开注册表,找到HKEY—LOCAL—MACHNE\SYSTEM\CurrentControlSet\Services\lanmanserver,在右面新建一个名为&maxworkitems&的DWORD值.然后双击该值,如果你的电脑有512以上内存,就设置为&1024&,如果小于512,就设置为256. 6、右击文件导致CPU使用率100%。 在点击文件时,如果不先用左键选中而直接用右键,就会导致CPU占用率100%。解决办法:右击桌面选择“属性”,在外观设置中单击“效果”按钮,在打开的窗口中取消“为菜单和工具提示使用下列过渡效果”的选项即可。 7、其他 一些不完善的驱动程序也可以造成CPU使用率过高。 经常使用待机功能,也会造成系统自动关闭硬盘DMA模式。这不仅会使系统性能大幅度下降,系统启动速度变慢,也会使是系统在运行一些大型软件和游戏时CPU使用率100%,
请登录后再发表评论!
用ctrl+alt+del启动工作管理员,查看每个进程的cpu和内存的使用率,正常情况下cpu总使用率应该在5%以下,内存要看你启动加载的情形,一般即使安装了杀毒程序,内存也应该200M以下。 如果在windows正常启动后无法结束进程,建议使用相关清理软件,例如兔子魔法、优化大师、360安全卫士等,其中兔子魔法在强制结束进程方面功能最强大,其他的也可以清除,但可能麻烦点。 清除流氓软件最关键的是清除启动加载项目和在windows安全模式下操作
请登录后再发表评论!
可能是中毒了
请登录后再发表评论!
主要问题可能发生在下面的某些方面:CPU占用率高的九种可能1、防杀毒软件造成故障由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,或者,升级你的硬件配备。2、驱动没有经过认证,造成CPU资源占用100%大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。3、病毒、木马造成大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。4、控制面板—管理工具—服务—RISINGREALTIMEMONITORSERVICE点鼠标右键,改为手动。5、开始-&运行-&msconfig-&启动,关闭不必要的启动项,重启。6、查看“svchost”进程。svchost.exe是WindowsXP系统的一个核心进程。svchost.exe不单单只出现在WindowsXP中,在使用NT内核的Windows系统中都会有svchost.exe的存在。一般在Windows2000中 svchost.exe进程的数目为2个,而在WindowsXP中svchost.exe进程的数目就上升到了4个及4个以上。7、查看网络连接。主要是网卡。8、查看网络连接当安装了WindowsXP的计算机做服务器的时候,收到端口445上的连接请求时,它将分配内存和少量地调配CPU资源来为这些连接提供服务。当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。你要确定合适的MaxWorkItems设置以提高系统响应能力。如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。要解决此问题,我们可以通过修改注册表来解决:在注册表编辑器中依次展开 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。然后双击该值,在打开的窗口中键入下列数值并保存退出:如果计算机有512MB以上的内存,键入“1024”;如果计算机内存小于512MB,键入“256”。
请登录后再发表评论!
看 的情况是cpu散热的问题排出硬件问题,就是软件病毒或系统的问题了。
请登录后再发表评论!
减少开机时太多程序运行
请登录后再发表评论!
一,可能中毒了,安全模式下全盘杀毒,二,可能是你看错了,任务管理器里有一个系统空闲进程会占用99%,他把它勿以为是CPU使用率。
请登录后再发表评论!10种检测Python程序运行时间、CPU和内存占用的方法
作者:Marina Mele
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了10种检测Python程序运行时间、CPU和内存占用的方法,包括利用Python装饰器或是外部的Unix Shell命令等,需要的朋友可以参考下
在运行复杂的Python程序时,执行时间会很长,这时也许想提高程序的执行效率。但该怎么做呢?
首先,要有个工具能够检测代码中的瓶颈,例如,找到哪一部分执行时间比较长。接着,就针对这一部分进行优化。
同时,还需要控制内存和CPU的使用,这样可以在另一方面优化代码。
因此,在这篇文章中我将介绍7个不同的Python工具,来检查代码中函数的执行时间以及内存和CPU的使用。
1. 使用装饰器来衡量函数执行时间
有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果:
import time
from functools import wraps
def fn_timer(function):
@wraps(function)
def function_timer(*args, **kwargs):
t0 = time.time()
result = function(*args, **kwargs)
t1 = time.time()
print ("Total time running %s: %s seconds" %
(function.func_name, str(t1-t0))
return result
return function_timer
接着,将这个装饰器添加到需要测量的函数之前,如下所示:
def myfunction(...):
例如,这里检测一个函数排序含有200万个随机数字的数组所需的时间:
def random_sort(n):
return sorted([random.random() for i in range(n)])
if __name__ == "__main__":
random_sort(2000000)
执行脚本时,会看到下面的结果:
Total time running random_sort: 1. seconds
2. 使用timeit模块
另一种方法是使用timeit模块,用来计算平均时间消耗。
执行下面的脚本可以运行该模块。
python -m timeit -n 4 -r 5 -s "import timing_functions" "timing_functions.random_sort(2000000)"
这里的timing_functions是Python脚本文件名称。
在输出的末尾,可以看到以下结果:
4 loops, best of 5: 2.08 sec per loop
这表示测试了4次,平均每次测试重复5次,最好的测试结果是2.08秒。
如果不指定测试或重复次数,默认值为10次测试,每次重复5次。
3. 使用Unix系统中的time命令
然而,装饰器和timeit都是基于Python的。在外部环境测试Python时,unix time实用工具就非常有用。
运行time实用工具:
$ time -p python timing_functions.py
输出结果为:
Total time running random_sort: 1. seconds
第一行来自预定义的装饰器,其他三行为:
&&& real表示的是执行脚本的总时间
&&& user表示的是执行脚本消耗的CPU时间。
&&& sys表示的是执行内核函数消耗的时间。
注意:根据,内核是一个计算机程序,用来管理软件的输入输出,并将其翻译成CPU和其他计算机中的电子设备能够执行的数据处理指令。
因此,Real执行时间和User+Sys执行时间的差就是消耗在输入/输出和系统执行其他任务时消耗的时间。
4. 使用cProfile模块
如果想知道每个函数和方法消耗了多少时间,以及这些函数被调用了多少次,可以使用cProfile模块。
$ python -m cProfile -s cumulative timing_functions.py
现在可以看到代码中函数的详细描述,其中含有每个函数调用的次数,由于使用了-s选项(累加),最终结果会根据每个函数的累计执行时间排序。
读者会发现执行脚本所需的总时间比以前要多。这是由于测量每个函数的执行时间这个操作本身也是需要时间。
5. 使用line_profiler模块
line_profiler模块可以给出执行每行代码所需占用的CPU时间。
首先,安装该模块:
$ pip install line_profiler
接着,需要指定用@profile检测哪个函数(不需要在代码中用import导入模块):
def random_sort2(n):
l = [random.random() for i in range(n)]
if __name__ == "__main__":
random_sort2(2000000)
最好,可以通过下面的命令获得关于random_sort2函数的逐行描述。
$ kernprof -l -v timing_functions.py
其中-l表示逐行解释,-v表示表示输出详细结果。通过这种方法,我们看到构建数组消耗了44%的计算时间,而sort()方法消耗了剩余的56%的时间。
同样,由于需要检测执行时间,脚本的执行时间更长了。
6. 使用memory_profiler模块
memory_profiler模块用来基于逐行测量代码的内存使用。使用这个模块会让代码运行的更慢。
安装方法如下:
pip install memory_profiler
另外,建议安装psutil包,这样memory_profile会运行的快一点:
$ pip install psutil
与line_profiler相似,使用@profile装饰器来标识需要追踪的函数。接着,输入:
$ python -m memory_profiler timing_functions.py
脚本的执行时间比以前长1或2秒。如果没有安装psutil包,也许会更长。
从结果可以看出,内存使用是以MiB为单位衡量的,表示的mebibyte(1MiB = 1.05MB)。
7. 使用guppy包
最后,通过这个包可以知道在代码执行的每个阶段中,每种类型(str、tuple、dict等)分别创建了多少对象。
安装方法如下:
$ pip install guppy
接着,将其添加到代码中:
from guppy import hpy
def random_sort3(n):
hp = hpy()
print "Heap at the beginning of the functionn", hp.heap()
l = [random.random() for i in range(n)]
print "Heap at the end of the functionn", hp.heap()
if __name__ == "__main__":
random_sort3(2000000)
运行代码:
$ python timing_functions.py
可以看到输出结果为:
通过在代码中将heap()放置在不同的位置,可以了解到脚本中的对象创建和删除操作的流程。
如果想学习更多关于Python代码速度优化方面的知识,我建议你去读这本书《.》
希望这篇文章能偶帮到你!^_^
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
腰缠万贯, 积分 8646, 距离下一级还需 1354 积分
论坛徽章:0
& && && && &&&
def sendpicture(imei):
& & & & print imei
& & & & while 1:
& & & & & & & & width = 240;
& & & & & & & & height = 320;
& & & & & & & & #screen = ImageGrab.grab()
& & & & & & & & #screenbox = screen.getbbox()
& & & & & & & & #x = screenbox[2] -
& & & & & & & & #y = screenbox[3] -
& & & & & & & & x = 1200 -
& & & & & & & & y = 800 -
& & & & & & & & x = random.randint(0, x)
& & & & & & & & y = random.randint(0, y)
& & & & & & & & box = (x, y, x+width, y+height)
& & & & & & & & print box
& & & & & & & & #pic = screen.crop(box)
& & & & & & & & pic = ImageGrab.grab(box)
& & & & & & & & filename = &d:\\& + imei + &.jpg&
& & & & & & & & pic.save(filename)
& & & &
& & & & & & & & filedata = open(filename,&rb&).read()
& & & & & & & & piclen = len(filedata)
& & & & & & & &
& & & & & & & & head = &PWIC&
& & & & & & & & head = head + (struct.pack(&i&,32+piclen))
& & & & & & & & head = head + (struct.pack(&i&,14))
& & & & & & & & head = head + (imei)
& & & & & & & & head = head + (struct.pack(&B&,0))
& & & & & & & & head = head + (struct.pack(&i&,piclen))
& & & & & & & & head = head + (filedata)
& & & & & & & & sock.mysend(head)
& & & & & & & & time.sleep(0.1)
def readthread():
& & & & while 1:
& & & & & & & & sock.myrecv()
& & & &
if __name__ == &__main__&:
& & & & sock = mysocket()
& && &&&sock.connect(&127.0.0.1&, 5001)
& && &&&reportstart(sys.argv[1])
& & & & thread.start_new_thread(sendpicture, (sys.argv[1],))
& & & & thread.start_new_thread(readthread, ())
& && &
& && & & & & & while 1:
& & & & & & & & pass复制代码一个就能CPU使用率22%,开五个就100%
工作就是100MS截一次屏
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
小富即安, 积分 3530, 距离下一级还需 1470 积分
论坛徽章:0
if __name__ == &__main__&:
& && &......
& && &&&thread.start_new_thread(readthread, ())
& && && && && &while 1:
& && && && && & pass
李营长 发表于
这样的话主线程不是一直在跑?光是主线程就要消耗很多cpu。 什么都不干可以sleep一下或者join。
可用积分 +5
腰缠万贯, 积分 8646, 距离下一级还需 1354 积分
论坛徽章:0
& &谢谢啊。加分
稍有积蓄, 积分 287, 距离下一级还需 213 积分
论坛徽章:0
如果有多个CPU,可以试试多进程么
小富即安, 积分 4716, 距离下一级还需 284 积分
论坛徽章:2
感觉多线程,用好sleep还是很牛的
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 python 获取cpu温度 的文章

 

随机推荐