簡體   English   中英

使用不同的參數並行運行函數-python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM