[英]Run a function in parallel with different arguments - python
我有一個功能slow_function
,它需要大約200秒來處理一個job_title
,它從全局變量讀取和寫入。
使用此代碼不會提高性能。 我是否缺少某些內容,但是返回的結果相同。
代碼並行運行五個作業類別:
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
您需要使用multiprocessing( https://docs.python.org/2/library/multiprocessing.html )模塊,因為線程模塊受GIL( https://docs.python.org/2/glossary)的限制.html#term-global-interpreter-lock )。
但是您不能使用全局變量在生成的進程之間交換數據!!! ...請參閱https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes
您應該從類方法中提取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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.