Nat*_*han 5 python parallel-processing multithreading
我已经决定学习如何在Python中完成多线程,我做了一个比较,看看我会在双核CPU上获得什么样的性能提升.我发现我的简单多线程代码实际上比顺序等效运行得慢,我无法弄清楚原因.
我设计的测试是生成一个大的随机数列表,然后打印最大值
from random import random
import threading
def ox():
print max([random() for x in xrange(20000000)])
Run Code Online (Sandbox Code Playgroud)
ox()我的英特尔酷睿2双核处理器需要大约6秒才能完成,ox();ox()大约需要12秒.
然后我尝试从两个线程调用ox()来查看完成的速度有多快.
def go():
r = threading.Thread(target=ox)
r.start()
ox()
Run Code Online (Sandbox Code Playgroud)
go()大约需要18秒才能完成,两个结果在1秒内完成打印.为什么这会慢?
我怀疑ox()是自动并行化,因为我查看Windows任务管理器性能选项卡,并ox()在我的python控制台中调用,两个处理器都会跳到大约75%的利用率,直到它完成.Python会自动将事物并行化max()吗?
您需要使用多进程框架来与Python并行化.幸运的是,随Python一起提供的多处理模块使得相当容易.
很少有语言可以自动并行化表达式.如果那是你想要的功能,我建议Haskell(Data Parallel Haskell)