原文请见
搞大数据必须要正视的一个问题就是并行计算。就像执行一件任务一样,大伙一起同时干,才有效率,才会很快出成果。正所谓“众人拾柴火焰高”~
对于并行计算,有很多高大上的概念,我也不全懂。这里就单单罗列一下我对于多进程和多线程计算的理解和总结。
先说“多进程”:
在Python中,实现多进程是比较容易的。我们可以使用multiprocessing进行进程的创建,比如说import multiprocessing as mp p = mp.Process(target=run_proc, args=('fireling',), name='Run_procProcess') p.start() p.join()
p = mp.Pool() p.map(run_proc, [i for i in range(m)]) p.close() p.join()
再说“多线程”:
和多进程的思路类似,我们也可以实现对线程的创建,在Python中,使用threading包实现。比如说import threading t = threading.Thread(target=run_thread, args=('fireling', ), name='Run_threadThread') t.start() t.join()
lock = threading.Lock()
lock.acquire() # 获取线程锁 xxxxxxxxxxx 此处省略若干代码 lock.release() # 释放线程锁
public class Test { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { while(true) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Runnable1:" + Thread.currentThread().getName()); // System.out.println("Runnable2:" + this.getName()); } } }) { @Override public void run() { while(true) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread1:" + Thread.currentThread().getName()); System.out.println("Thread2:" + this.getName()); } } }; thread.start(); } }
关于”协程“:
Python能实现多个线程,但是实际上无法充分利用系统资源,原因在于Python存在全局锁机制,简单来说,就是同一时刻在一个进程中只能有一个线程对数据进行操作。所以实现并行效果,采用多进程方法,比较好。版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lining0806/article/details/47106341