gil相关内容

Python线程什么时候快速?

我们都知道 GIL 的恐怖之处,关于使用multiprocessing模块的正确时间的大量讨论,但是我仍然不认为我对使用Python线程(主要关注CPython)何时是正确的答案有很好的直觉. 在哪些情况下,GIL并非重大瓶颈?线程是最合适答案的用例类型是什么? 解决方案 只有在发生大量阻塞I/O时,线程才有意义.如果真是这样,那么某些线程可以睡眠,而其他线程可以工作.如果线程受CP ..
发布时间:2020-05-13 21:05:11 Python

numpy和全局解释器锁定

我将要编写一些计算量大的Python代码,几乎可以肯定,它将大部分时间都花在numpy的线性代数函数中. 眼前的问题是尴尬地平行.长话短说,对我来说最简单的方法就是使用多个线程.几乎可以肯定,主要障碍将是全球口译员锁定(GIL). 为帮助设计这一点,最好有一个心理模型,对于该模型,可以预期numpy操作将在其持续时间内释放GIL.为此,我希望能有一些经验法则,注意事项和注意事项,指针等 ..
发布时间:2020-05-13 21:04:43 Python

并行文件匹配,Python

我正在尝试改进一种扫描文件中是否包含恶意代码的脚本.我们在文件中有一个正则表达式模式列表,每行一个模式.这些正则表达式适用于grep,因为我们当前的实现基本上是bash脚本find \ grep组合. bash脚本在我的基准目录上花费358秒.我能够编写一个Python脚本,在72秒内做到了这一点,但还想进一步改进.首先,我将发布基本代码,然后进行调整: import os, sys, Qu ..
发布时间:2020-05-13 21:03:36 Python

并发中的Pybind11并行处理问题:: parallel_for

我有一个在矩阵上执行过滤的python代码.我使用pybind11创建了一个C ++接口,该接口已成功以序列化方式运行(请参见下面的代码). 与序列化版本相比,我正在尝试使其并行处理,以期减少计算时间.为此,我将大小为M×N的数组拆分为大小为M×(N/3)的三个子矩阵,以使用同一接口并行处理它们. 我用ppl.h库制作了一个并行的for循环,并在每个循环中在大小为M×(N/3)的子矩阵 ..
发布时间:2020-05-13 20:14:25 C/C++开发

python中的多线程:大部分时间是否真的有效?

据我所知,在大多数情况下(不是全部),是性能因素驱动multi-threading的编程. (与Java或Python无关). 我正在SO中的GIL上阅读这篇启发性文章.本文总结了python采用GIL机制;即在任何给定时间只有single Thread可以执行python byte code. 这使single thread应用程序真正更快. 我的问题如下: 由于如果在给定点仅 ..
发布时间:2020-05-13 19:58:21 Python

使用并行线程提高Python执行速度

假设我有以下示例代码: x = foo1(something1) y = foo2(something2) z = max(x, y) 我想通过使用线程来缩短此代码的执行时间(希望对您有所帮助吗?).我想使事情尽可能简单,所以基本上我想做的是创建两个同时工作的线程,分别计算foo1和foo2. 我正在阅读一些有关线程的内容,但是我发现它有些棘手,并且我不会因为做这样简单的事情而在 ..
发布时间:2020-05-13 19:41:33 Python

为什么numpy计算不受全局解释器锁定的影响?

我正在尝试决定是否应该使用多处理或线程,并且我已经学到了一些关于任何人都可以解释原因,以及如何确定我的(可能很笨拙的)代码是否适合多线程吗? 解决方案 许多 numpy计算不受GIL的影响,但不是全部. 虽然在不需要Python解释器的代码(例如C库)中,可以专门释放GIL-允许依赖于解释器的其他代码继续运行.在Numpy C代码库中,宏NPY_BEGIN_THREADS和NPY_E ..
发布时间:2020-05-13 19:34:21 Python

urllib2的多处理没用吗?

我最近尝试使用多处理模块(和它的工人池).我在这里阅读了一些有关多线程(与标准的非线程版本相比,它使整个过程变慢了)和多处理的讨论,但是我找不到一个(可能非常简单的)问题的答案: 您可以通过多处理来加速url调用吗,还是不是像网络适配器那样的瓶颈?我看不到urllib2-open-method的哪一部分可以并行化以及应该如何工作... 编辑:这是我要加快的请求,也是当前的多处理设置: ..
发布时间:2020-05-13 19:25:48 Python

在Linux上使用Taskset的多核系统上的Python Global Interpreter Lock(GIL)解决方法?

所以我刚刚看完有关Python全局解释器锁(GIL)的演讲 http://blip.tv/文件/2232410 . 要点是GIL是用于单核系统的相当不错的设计(Python本质上将线程处理/调度留给了操作系统).但这可能会在多核系统上造成严重后果,最终导致IO密集型线程被CPU密集型线程严重阻塞,上下文切换的开销,ctrl-C问题[*]等. 因此,由于GIL限制我们基本上在一个CPU上 ..
发布时间:2020-05-13 02:22:47 Python

在Cython中使用move方法时出现编译错误

我的问题类似于在这里提出的问题-这是我拥有的最简单的示例(只是网络中提供的Rectangle示例的扩展 我想做什么 我的C ++代码返回Point的双端队列.它也可以返回点向量.任何容器都可以 在cython代码中,我想将返回的点的双端队列(对于for循环的每个迭代一个)存储在一个集合中(例如向量或双端队列).该集合将是一个实例变量. 稍后,我想遍历集合并将该双点队列的双端队列转 ..
发布时间:2020-05-12 19:22:42 C/C++开发

线程安全的备忘录装饰器

我正在尝试制作一个可与多个线程一起使用的备忘录装饰器. 我知道我需要将缓存用作线程之间的共享对象,并获取/锁定共享对象.我当然正在启动线程: for i in range(5): thread = threading.Thread(target=self.worker, args=(self.call_queue,)) thread.da ..
发布时间:2020-05-08 18:52:35 Python

Python GIL是否可以防止多核计算机上的CPU使用率超过100%?

许多参考文献指出,Python GIL降低了多核计算机中多线程代码的性能,因为每个线程都需要在执行之前获取GIL. 换句话说,看起来GIL实际上将多线程Python程序制作为单线程模式. 例如: (1)线程A获取GIL,执行一段时间,释放GIL (2)线程B获得GIL,执行一段时间,释放GIL ... 但是,经过一些简单的实验,我发现尽管GIL降低了性能,但多核 ..
发布时间:2020-05-03 06:09:35 Python

Python线程和GIL

我正在阅读有关GIL的信息,但从未真正指定它是否包含主线程(我认为是这样).我问的原因是因为我有一个带有线程设置的程序,可以修改字典.主线程根据玩家输入添加/删除,而一个线程循环更新和更改数据. 但是,在某些情况下,线程可能会在字典键上进行迭代,以便可以将其删除.如果有所谓的GIL并且它们按顺序运行,为什么我会得到dict更改错误?如果一次只能运行一个,那么从技术上讲这应该不会发生. ..
发布时间:2020-05-03 05:54:56 Python

为什么Python在多处理或多线程应用程序中不比Java好?

由于Python在GIL方面存在一些问题,因此Java更适合开发多处理应用程序。你可以用你的方式来证明java的有效处理的确切推理吗? 解决方案 CPython中多线程的最大问题是全局解释器锁(GIL)(请注意其他Python实现不必然会分享这个问题!) GIL是一个实现细节,可以有效地阻止Python中单独线程的并行(同时)执行。问题是每当要执行Python字节代码时,当前线程必须 ..
发布时间:2018-12-28 14:38:02 Java开发

为什么Java虚拟机中没有GIL?为什么Python需要这么糟糕?

我希望有人可以提供一些见解,了解Java虚拟机的根本不同之处在于它可以很好地实现线程而无需全局解释器锁(GIL),而Python则需要这样的恶意。 解决方案 Python(该语言)不需要GIL(这就是为什么它可以完美地在JVM [Jython]上实现的原因。 NET [IronPython],这些实现多线程自由)。 CPython(流行的实现)总是使用GIL来简化编码(尤其是垃圾收集机制的 ..
发布时间:2018-12-04 13:48:20 Java开发

f2py函数释放GIL

当我调用f2py包装函数时,全局解释器锁(GIL)会被释放吗? (我很乐意尝试自己发现,但我对这个numpy资源不熟悉,不知道该从哪里开始寻找)... 为了澄清,对这个问题的一个很好的答案是要么帮助我知道在numpy源代码中寻找 Py_BEGIN_ALLOW_THREADS 或它只是让我知道GIL是否被释放(最好有一些证据)。 解决方案 不,f2py默认使用GIL。但是,您可以 ..
发布时间:2018-03-16 17:22:01 Python