我正在寻找这个问题的概念答案。
我想知道在 python 中使用ThreadPool
来执行并发任务是否可以保证数据不会损坏;我的意思是多个线程不会同时访问关键数据。
如果是这样,该ThreadPoolExecutor
内部如何工作以确保关键数据一次只能由一个线程访问?
线程池不保证共享数据不会损坏。线程可以在任何字节代码执行边界进行交换,并且损坏始终存在风险。共享数据应由同步资源(如锁、条件变量和事件(保护。查看线程模块文档
concurrent.futures.ThreadPoolExecutor
是专用于concurrent.futures
异步任务模型的线程池。但传统线程的所有风险仍然存在。
如果您使用的是 python 异步模型,则应在主线程上调度摆弄共享数据的内容。线程池应用于自治事件,尤其是那些等待阻塞 I/O 的事件。
如果是这样,这个 ThreadPoolExecutor 如何在内部工作以确保关键数据一次只能由一个线程访问?
它没有,那是你的工作。
像map
这样的高级方法将使用安全的工作队列,而不是在线程之间共享工作项,但是如果你有其他可以共享的资源,那么池就不知道或不关心,这是你作为开发人员的问题。