2014-07-04 129 views
0

我在写一个Python脚本in Python 2.7其中我需要在一个范围内生成大约500,000个统一的随机数。我需要这样做4次,对它们进行一些计算并写出4个文件。python中的多重处理

目前我做的:(this is just part of my for loop, not the entire code)

random_RA = [] 
for i in xrange(500000): 
    random_RA.append(np.random.uniform(6.061,6.505)) # FINAL RANDOM RA 

random_dec = [] 
for i in xrange(500000): 
    random_dec.append(np.random.uniform(min(data_dec_1),max(data_dec_1))) # FINAL RANDOM 'dec' 

生成范围内的随机数。我正在运行Ubuntu 14.04当我运行程序时,我也打开我的系统管理器,看看我的8个CPU是如何工作的。我似乎注意到,当程序运行时,8个CPU中只有1个似乎以100%的效率工作。所以整个程序需要大约45分钟才能完成。

我注意到,它可以使用所有的CPU我的优势使用模块Multiprocessing

我想知道这是不是足够在我的例子:

random_RA = [] 
for i in xrange(500000): 
    multiprocessing.Process() 
    random_RA.append(np.random.uniform(6.061,6.505)) # FINAL RANDOM RA 

即加入只是线路multiprocessing.Process(),那就够了吗?

+0

有你甚至阅读文件? https://docs.python.org/dev/library/multiprocessing.html –

+0

@AleksanderLidtke我读过它,我认为上述可能工作。但在尝试之前,我想知道它是否会来自专家 – ThePredator

+1

回答你的问题:那肯定会**不够。 – freakish

回答

0

为了让你开始:

import multiprocessing 
import random 

def worker(i): 
    random.uniform(1,100000) 
    print i,'done' 


if __name__ == "__main__": 
    for i in range(4): 
     t = multiprocessing.Process(target = worker, args=(i,)) 
     t.start() 
    print 'All the processes have been started.' 

您必须门t = multiprocess.Process(...)与​​为每个工人称这个程序(模块)再次找出它有什么做的。如果门没有发生,它会产生更多的进程...

只是为了完整性,生成500000个随机数不会带你45分钟,所以我认为这里有一些密集计算:你可能想要密切关注他们。

1

如果使用多处理,应尽可能避免共享状态(如random_RA列表)。 相反,尝试使用Pool及其map方法:

from multiprocessing import Pool, cpu_count 

def generate_random_ra(x): 
    return np.random.uniform(6.061, 6.505) 

def generate_random_dec(x): 
    return np.random.uniform(min(data_dec_1), max(data_dec_1)) 

pool = Pool(cpu_count()) 
random_RA = pool.map(generate_random_ra, xrange(500000)) 
random_dec = pool.map(generate_random_dec, xrange(500000))