Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
如何在多核上运行使用numpy的python程序,最好使用线程_Python_Multithreading_Numpy_Multiprocessing - Fatal编程技术网

如何在多核上运行使用numpy的python程序,最好使用线程

如何在多核上运行使用numpy的python程序,最好使用线程,python,multithreading,numpy,multiprocessing,Python,Multithreading,Numpy,Multiprocessing,我想进行并行计算并将结果返回到主线程。由于这已经做了很多次,我假设进程间消息传递的开销会影响性能(这个假设正确吗?),所以我想使用线程 据我所知,只有在使用jython或ironpython时,线程才会在不同的内核上运行(哪个更好?) 假设这是正确的——我所要做的就是将eclipse解释器切换到上面的一个解释器 最后,我正在使用numpy。这是个问题吗?jython/ironpython的实现会阻碍numpy的性能吗 更新: 我现在正尝试按照下面的建议使用多进程。我在以整洁的方式传递参数时遇到了

我想进行并行计算并将结果返回到主线程。由于这已经做了很多次,我假设进程间消息传递的开销会影响性能(这个假设正确吗?),所以我想使用线程

据我所知,只有在使用jython或ironpython时,线程才会在不同的内核上运行(哪个更好?)

假设这是正确的——我所要做的就是将eclipse解释器切换到上面的一个解释器

最后,我正在使用numpy。这是个问题吗?jython/ironpython的实现会阻碍numpy的性能吗

更新: 我现在正尝试按照下面的建议使用多进程。我在以整洁的方式传递参数时遇到了问题(也是由于某些原因,当我停止应用程序运行打开的进程时,请不要关闭,我必须重新启动计算机!)。这就是我想做的:

pool = multiprocessing.Pool()
results = pool.map(my_class(param1=bla1, param2=bla2), list_args)
其中,list_args是类my_类的
\u call_uu
函数的参数列表,bla1和bla2是numpy数组

查询:

  • 池的默认值为cpu_count()。我想这是最优的

  • 为什么这不起作用?(过程似乎没有返回…)


  • 我错过了一个包装一切的主要功能。显然,这对于多处理很重要

    def main():
        run_my_stuff()
    
    if __name__ == "__main__":
        main()
    

    此外-如果进程正在使用的队列已满(它有一定的容量),也会产生同样的影响,因此可以帮助更改代码,以便在添加项目的同时从队列中提取项目。

    您是否考虑过使用
    多处理模块而不是线程?它非常易于使用(特别是
    多处理.Pool
    ),并且允许您在CPython中使用多个内核执行CPU绑定的任务,因为每个进程都有一个单独的全局解释器锁。jython没有numpy。感谢您的评论,请查看我的更新