我经常在执行多个线程的情况下广泛使用queue.Queue
。通过使用concurrent.futures.ThreadPoolExecutor
。
我从博客中了解到queue.Queue
应该是线程安全的,但这是否意味着它是线程安全的,前提是Python解释器一次只能执行一个线程( GIL ),或者它也是线程安全的。在使用multiprocessing
的情况下,通过使用子进程而不是线程来回避 GIL ?
https://docs.python.org/3/library/concurrent.futures.html#processpoolexecutor
最佳答案
ProcessPoolExecutor对call queue使用multiprocessing.queues.Queue,对result queue使用mp_context.SimpleQueue(multiprocessing)-用于在本地线程和进程之间进行通信。
Nice graphic of ProcessPoolExecutor
... for use in a multi-processing (rather than multi-threading) context
关于python - 当多个子进程使用 `queue.Queue`进行访问时, `concurrent.futures.ProcessPoolExecutor`是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61328662/