多进程

在python中实现多进程程序,最常用的做法是借助multiprocessing模来实现,具体实现可以参考其文档,我们可以利用pool一次性提前创建好大量进程,为后续工作做好准备。举例如下:

from multiprocessing import Pool
import os, time, random

def long_time_task(name):
    print 'Run task %s (%s)...' % (name, os.getpid())
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print 'Task %s runs %0.2f seconds.' % (name, (end - start))

if __name__=='__main__':
    p = Pool(multiprocessing.cpu_count())
    for i in range(5):
        p.apply_async(long_time_task, args=(i,))
    print 'Waiting for all subprocesses done...'
    p.close()
    p.join()
    print 'All subprocesses done.'

多线程

在python中实现多线程程序,我们常用的模块是threading,此外,我们也可以利用multiprocessing.dumpy库,具体可以参考其文档,举例如下:

import time, threading

# 新线程执行的代码:
def loop():
    print 'thread %s is running...' % threading.current_thread().name
    n = 0
    while n < 5:
        n = n + 1
        print 'thread %s >>> %s' % (threading.current_thread().name, n)
        time.sleep(1)
    print 'thread %s ended.' % threading.current_thread().name

print 'thread %s is running...' % threading.current_thread().name
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
print 'thread %s ended.' % threading.current_thread().name

多进程还是多线程?

多进程内存共享实现

多进程虽然可以充分利用多核CPU实现高并发,但它对计算资源的消耗也是巨大的。

from multiprocessing import Pool
def worker(i):
	print read_only_var[i]
if __name__ == '__main__':
p = Pool(8)
read_only_var = [0]*1000000
data = [i for i in xrange(1000000)]
p.map_async(worker,data)
p.close()
p.join()

参考链接