[英]is python ThreadPoolExecutor thread safe?
就像期貨寫同一個文件時我應該手動加鎖以保證他們一一寫嗎?
我的意思是concurrent.futures.ThreadPoolExecutor
而且我知道 java executor 是線程安全的
一個例子:
def task():
with open("somefile", "a") as fh:
fh.write(part_of_data)
do_something()
with open("somefile", "a") as fh:
fh.write(other_data)
在這個例子中,當在 ThreadPoorExecuter 中執行任務時,我想確保 each other_data
附加到part_of_data
旁邊
我不確定with
語句是原子操作,但如果不是,執行程序還應保證文件正確打開和關閉
這是我在查看標准庫中ThreadPoolExecutor的實現后的研究:
shutdown()
方法是線程安全的,因為它在修改共享狀態之前需要鎖定。
submit()
方法僅在其某些操作中是線程安全的,但實際上並不重要。 當您提交要在線程池中執行的新函數時,您的函數將放置在線程安全queue.SimpleQueue
的實例中。 然后工作線程阻塞在這個隊列上,等待彈出提交的函數來執行它們。 因為隊列是線程安全的,所以提交函數的分派是線程安全的,這意味着您提交的任何函數都不會孤立(未執行)或執行兩次。
不是線程安全的部分是內部_adjust_thread_count()
方法。 它可以同時從兩個不同的線程調用,創建一個競爭,其中兩個線程都看到num_threads < self._max_workers
並且都創建新線程來填充線程池。 但是,如果發生這種情況,也沒關系,因為它只會導致線程池中出現額外的線程。 對於大多數項目來說,這幾乎不是一個需要關心的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.