使用python的"future"模块中的"ThreadPoolExecutor"时,数据安全是否得到保证?



我正在寻找这个问题的概念答案。

我想知道在 python 中使用ThreadPool来执行并发任务是否可以保证数据不会损坏;我的意思是多个线程不会同时访问关键数据

如果是这样,该ThreadPoolExecutor内部如何工作以确保关键数据一次只能由一个线程访问?

线程池不保证共享数据不会损坏。线程可以在任何字节代码执行边界进行交换,并且损坏始终存在风险。共享数据应由同步资源(如锁、条件变量和事件(保护。查看线程模块文档

concurrent.futures.ThreadPoolExecutor是专用于concurrent.futures异步任务模型的线程池。但传统线程的所有风险仍然存在。

如果您使用的是 python 异步模型,则应在主线程上调度摆弄共享数据的内容。线程池应用于自治事件,尤其是那些等待阻塞 I/O 的事件。

如果是这样,这个 ThreadPoolExecutor 如何在内部工作以确保关键数据一次只能由一个线程访问?

它没有,那是你的工作。

map这样的高级方法将使用安全的工作队列,而不是在线程之间共享工作项,但是如果你有其他可以共享的资源,那么池就不知道或不关心,这是你作为开发人员的问题。

相关内容

最新更新