我已经决定学习如何在Python中完成多线程,并且进行了比较以查看在双核CPU上可以获得什么样的性能提升。我发现我的简单多线程代码实际上比顺序运行的慢,我不知道为什么。
我进行的测试是生成大量随机数,然后打印最大数量
from random import random
import threading
def ox():
print max([random() for x in xrange(20000000)])
ox()
在我的Intel Core 2 Duo上完成大约需要6秒,而ox();ox()
大约需要12秒。
然后,我尝试从两个线程调用ox()来查看完成的速度。
def go():
r = threading.Thread(target=ox)
r.start()
ox()
go()
大约需要18秒才能完成,并且两个结果会在彼此之间的1秒钟内打印出来。为什么要慢一点?
我怀疑ox()
它是自动并行化的,因为如果我查看Windows任务管理器的“性能”选项卡,并ox()
在我的python控制台中调用,则两个处理器的利用率都将提高到大约75%,直到完成为止。Python是否会自动并行化事物max()
?
您需要使用多进程框架与Python并行化。幸运的是,Python附带的多处理模块使这一操作相当容易。
很少有语言可以自动并行化表达式。如果这是您想要的功能,我建议使用Haskell(数据并行Haskell)
问题内容: 假设线程是从main方法启动的。如果在线程中引发异常但未在线程中处理异常,会发生什么情况? 是否可以将异常传播回main方法? 问题答案: 我们正在谈论方法抛出的未经检查的异常。默认情况下,您会在系统错误中得到以下信息: 这是printStackTrace处理未处理异常的结果。要处理它,您可以添加自己的UncaughtExceptionHandler: 要为所有线程设置处理程序,请使用
这是我的代码: 我正在获取NetworkOnMainThreadException。我认为问题出在httppost中,但我无法解决。
最近我正在学习Spring框架。所以我正在尝试检查依赖注入在Spring框架中的工作原理。因此,我创建了一个新的java项目并使用基于构造函数XML的配置练习依赖注入代码。运行我的项目后,我收到了这个错误...... 类路径资源[com/mir00r/beans.XML]的XML文档中的第24行无效;嵌套异常为组织。xml。萨克斯。SAXParseException;行号:24;列数:9;cvc复
我正在学习selenium并尝试运行以下代码,但它引发了异常。NoSuchFieldError:空字节数组。请帮助我理解这个简单的程序出了什么问题。 控制台: 异常线程"main"java.lang.NoSuchFieldError:EMPTY_BYTE_ARRAY
问题内容: 我对Python和多线程编程非常陌生。基本上,我有一个脚本可以将文件复制到另一个位置。我希望将其放置在另一个线程中,以便可以输出以指示脚本仍在运行。 我遇到的问题是,如果无法复制文件,它将引发异常。如果在主线程中运行,这没关系;但是,使用以下代码不起作用: 在线程类本身中,我尝试重新抛出异常,但是它不起作用。我已经看到这里的人问类似的问题,但是他们似乎都在做比我想做的事情更具体的事情(
问题内容: 我正在运行以下简单代码: 但是当我运行它时,它会打印 实际上python线程会忽略我的+键盘中断而无法打印。为什么?此代码有什么问题? 问题答案: 尝试 没有对的调用,主要过程是过早地跳出该块,因此不会被捕获。我的第一个想法是使用,但这似乎阻塞了主进程(忽略KeyboardInterrupt),直到完成。 导致线程在主进程结束时终止。