是否有用于工作线程的Pool
类,类似于多处理模块的Pool
类?
我喜欢例如并行化地图功能的简单方法
def long_running_func(p):
c_func_no_gil(p)
p = multiprocessing.Pool(4)
xs = p.map(long_running_func, range(100))
但是,我希望这样做而不会产生新流程的开销。
我知道GIL
。但是,在我的用例中,该函数将是IO
绑定的C
函数,python包装器将在实际函数调用之前为其释放GIL
。
我必须编写自己的线程池吗?
我刚刚发现模块中实际上 有一个基于线程的Pool接口multiprocessing
,但是它有些隐藏并且没有正确记录。
可以通过导入
from multiprocessing.pool import ThreadPool
它是使用包装Python线程的虚拟Process
类实现的。可以找到基于线程的Proces
s类multiprocessing.dummy
,在docs中对其进行了简要介绍。该虚拟模块应该提供基于线程的整个多处理接口。
我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind
我有下面的代码片段,它试图在多个子进程之间分割处理。 while循环中的主进程正在调用search函数,如果队列达到阈值计数,则处理池将映射到进程函数,其中作业来自队列。我的问题是,python多处理池是在执行期间阻塞主进程,还是立即继续执行?我不想遇到这样的情况,“has_jobs_to_process()”的计算结果为true,并且在处理作业的过程中,另一组作业的计算结果为true,并且再次调
我知道子进程是进程,而不是线程。我使用了错误的语义,因为大多数人在谈到“多线程”时都知道您的意图。所以我会把它保留在标题中。 想象一下这样一个场景:使用一个自定义函数或模块,您连续有多个类似和复杂的事情要做。使用所有可用的核心/线程(例如8/16)非常有意义,这就是的目的。 理想情况下,您需要多个同时工作的人员,并向一个控制器发送/从一个控制器发送/回调消息。 node cpool、fork po
问题内容: 我想使用multiprocessing.Pool,但是multiprocessing.Pool不能在超时后中止任务。我找到了解决方案,并对其进行了一些修改。 主要修改-使用 sys.exit(1) 退出工作进程。它杀死了工作进程并杀死了工作线程,但是我不确定这个解决方案是否很好。当进程因正在运行的作业而终止时,我会遇到哪些潜在的问题? 问题答案: 停止正在运行的作业没有隐含的风险,操作
问题内容: 我试图理解多处理比线程的优势。我知道多处理绕过了全局解释器锁,但是还有什么其他优点,线程不能做同样的事情? 问题答案: 该模块使用线程,该模块使用进程。不同之处在于线程在相同的内存空间中运行,而进程具有单独的内存。这使得在具有多处理的进程之间共享对象更加困难。由于线程使用相同的内存,因此必须采取预防措施,否则两个线程将同时写入同一内存。这就是全局解释器锁的作用。 生成过程比生成线程
我有一个Spring Boot 1.5应用程序与Spring Batch 3.0.7和Java8。我最近收到了一些连接超时,当一个计划作业试图从5个线程开始时,而另一个长时间运行的批处理作业正在运行。似乎有15个线程合并的连接争用。我没有找到任何留档、博客或问题,似乎解决了Spring Batch中线程和池的相关性。 我使用HikariCP有3个连接,每个数据源配置为默认值(10个连接): bat