Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numba@jit加速使用队列的多处理循环_Python_Multiprocessing_Numba - Fatal编程技术网

Python 使用numba@jit加速使用队列的多处理循环

Python 使用numba@jit加速使用队列的多处理循环,python,multiprocessing,numba,Python,Multiprocessing,Numba,我正在学习Numba的方法,但还没有弄清楚如何使用或是否需要使用multiprocessing.queue来组合来自不同进程的所有循环数据。 我甚至想使用多处理模块将大循环分解为多个小循环,以在单独的进程中运行,还是Numba会自动这样做 下面的代码在多处理模块中运行,它在多个进程中打开,这些进程被划分为系统核心计数。因此,在整个计算的不同部分中有许多代码运行和计算循环的实例,然后结果0或1被发送回父函数。 我的猜测是Numba自己做的不同,我不想使用队列或多处理模块 @jit(nopython

我正在学习Numba的方法,但还没有弄清楚如何使用或是否需要使用multiprocessing.queue来组合来自不同进程的所有循环数据。 我甚至想使用多处理模块将大循环分解为多个小循环,以在单独的进程中运行,还是Numba会自动这样做

下面的代码在多处理模块中运行,它在多个进程中打开,这些进程被划分为系统核心计数。因此,在整个计算的不同部分中有许多代码运行和计算循环的实例,然后结果0或1被发送回父函数。 我的猜测是Numba自己做的不同,我不想使用队列或多处理模块

@jit(nopython=True)
def prime_multiprocess(n, c, q):
    a, b, c = n[0], n[1], c
    for i in range(a, b):
        if c % i == 0:
            return q.put(0)
    return q.put(1)

This error may have been caused by the following argument(s):
- argument 2: cannot determine Numba type of <class 'multiprocessing.queues.Queue'>
@jit(nopython=True)
def prime_多进程(n、c、q):
a、 b,c=n[0],n[1],c
对于(a,b)范围内的i:
如果c%i==0:
返回q.put(0)
返回q.put(1)
此错误可能是由以下参数引起的:
-参数2:无法确定一种类型的

我很欣赏任何解释或链接,它们解释了如何使用numba和并行循环来加快速度。

我做了一些测试,似乎一个嵌套函数解决了这个问题: 我将其改写为:

def prime_multiprocess(n, c, q):
    a, b, c = n[0], n[1], c

    @jit(nopython=True)
    def speed_comp():
        for i in range(a, b):
            if c % i == 0:
                return 0
        return 1
    q.put(speed_comp())
它更快

编辑: 似乎有一个缺点,就是我只能使用整数的大小。“叹气”“为什么总是有一个权衡:(” 我想知道是否有可能用numpy解决这个问题,以及它是否会减慢速度。答案可能是:


Numba的工作方式是将整数转换为计算机级整数,这些整数的作用域仅限于系统级,如64位。这使它运行得更快,因为在计算上没有开销。不幸的是,如果没有开销,就无法计算更大的整数。

我做了一些测试d看来嵌套函数解决了这个问题: 我将其改写为:

def prime_multiprocess(n, c, q):
    a, b, c = n[0], n[1], c

    @jit(nopython=True)
    def speed_comp():
        for i in range(a, b):
            if c % i == 0:
                return 0
        return 1
    q.put(speed_comp())
它更快

编辑: 似乎有一个缺点,就是我只能使用整数的大小 我想知道是否有可能用numpy解决这个问题,以及它是否会减慢速度。答案可能是:


Numba的工作方式是将整数转换为机器级整数,而机器级整数的范围仅限于您的系统级,如64位。这使它运行得更快,因为在计算上没有开销。不幸的是,如果没有开销,则无法计算更大的整数。

概念上,Numba需要s Python代码并将其转换为运行速度明显加快的C代码。Numba只能使用Python的最基本元素,因为它必须使用C等效元素。在这种情况下,您的
q
对象是Numba不知道如何使用的Python对象。如果您想使用Numba,不应该将其包含在函数中。这就是为什么我明白了。谢谢James。代码中的'q'参数是它不喜欢的类型。我看不到从多个进程无队列地将数据传递回父进程的解决方法。仅供参考,这里有一个Numba支持的python功能的全面列表:概念上,Numba接受python代码并将其转换为运行速度明显加快的C代码。Numba只能使用Python最基本的元素,因为它必须使用C等效物。在这种情况下,你的
q
对象是一个Numba不知道如何使用的Python对象。如果你想使用Numba,你不应该将它包含在函数中。这就是我的想法。谢谢James。q'pa代码中的参数是它不喜欢的类型。我看不到从多个进程无队列地将数据传递回父进程的解决方法。仅供参考,这里有一个Numba支持的python功能的全面列表: