2015-10-15 57 views
0

我有一个函数slow_function需要大约200秒来处理一个job_title,它读写一个全局变量。与不同参数并行运行一个函数 - python

使用此代码的性能没有提高。我是否错过了一些东西,但是这会返回相同的结果。

代码并行运行五个的工作类别:

from threading import Thread 
    threads = [] 

    start = time.time() 
    for job_title in self.job_titles: 
     t = Thread(target=self.slow_function, args=(job_title,)) 
     threads.append(t) 
    # Start all threads 
    for x in threads: 
     x.start() 

    # Wait for all of them to finish 
    for x in threads: 
     x.join() 
    end = time.time() 
    print "New time taken for all jobs:", end - start 
+0

请阅读这一个http://stackoverflow.com/questions/32657840/is-it-possible-to-avoid-locking-overhead-when-sharing-类型的字典之间线程-IN-p/32659672#32659672。我不确定你的问题是否重复,但它可以帮助你。 – Jimilian

+0

谢谢。你的解决方案为我工作。 – Azhar

回答

0

您应该从class方法中提取slow_function,因为在进程之间共享本地上下文是不可能的。之后,你可以使用此代码:

from multiprocessing import Pool 

start = time.time() 

pool = Pool() 

results = pool.map(slow_function, self.job_titles) 

for r in results: 
    # update your `global` variables here 

end = time.time() 
print "New time taken for all jobs:", end - start 
相关问题