gpt4 book ai didi

python - python ThreadPoolExecutor 线程安全吗?

转载 作者:行者123 更新时间:2023-11-28 17:14:22 27 4
gpt4 key购买 nike

比如当 futures 写入同一个文件时我是否应该手动加锁以保证他们一个一个地写入?

  • 我的意思是concurrent.futures.ThreadPoolExecutor

  • 而且我知道 java 执行器是线程安全的

一个例子:

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 中执行任务时,我想确保每个 other_data 都附加到 part_of_data

我不确定with语句是原子操作,但如果不是,执行者也应该保证文件正确打开和关闭

最佳答案

这是我在查看实现后的研究 of the ThreadPoolExecutor在标准库中:

shutdown()方法是线程安全的,因为它在修改共享状态之前需要锁定。

submit()方法仅在其某些操作中是线程安全的,但实际上这无关紧要。当您提交要在线程池中执行的新函数时,您的函数将放置在线程安全的实例中 queue.SimpleQueue .工作线程然后阻塞在这个队列上,等待弹出提交的函数来执行它们。因为队列是线程安全的,提交函数的调度是线程安全的,这意味着您提交的函数都不会被孤立(未执行)或执行两次。

非线程安全的部分是内部_adjust_thread_count()方法。它可以同时从两个不同的线程调用,创建一个竞争,两个线程都看到 num_threads < self._max_workers并且都创建新线程来填充线程池。不过,如果发生这种情况,也没有关系,因为它只会导致线程池中出现额外的线程。对于大多数项目来说,这几乎不是一个需要关心的问题。

关于python - python ThreadPoolExecutor 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45286344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com