当前位置: 首页 > 知识库问答 >
问题:

python多处理池。地图挂起

岳华灿
2023-03-14

我甚至不能使用Python 2.7中运行的多重处理包(使用spyder作为窗口上的用户界面)进行并行处理的最简单的例子,我需要帮助解决这个问题。我已经运行了conda更新,所以所有的包都应该是最新的和兼容的。

即使多处理软件包文档(如下所示)中的第一个示例也不起作用,它会生成4个新进程,但控制台只是挂起。在过去的3天里,我已经尝试了我能找到的一切,但是没有一个不挂起就运行的代码能够将我25%以上的计算能力分配给这个任务(我有一台4核计算机)。

我已经放弃了运行我设计的程序,现在需要并行处理,我只想得到概念证明,以便从中构建。有人能解释一下并给我指出正确的方向吗?谢谢

示例1来自https://docs.python.org/2/library/multiprocessing.html

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool()
    print(p.map(f, [1, 2, 3]))

示例2(从原始版本修改)来自http://chriskiehl.com/article/parallelism-in-one-line/

from multiprocessing import Pool

def fn(i):
    return [i,i*i,i*i*i]

test = range(10)

if __name__ == '__main__':    
    pool = Pool() 
    results = map(fn,test)
    pool.close() 
    pool.join() 

如果确实有答案,我表示歉意,因为似乎我应该能够管理这样一个简单的任务,但我不是程序员,而且鉴于我的知识水平非常有限,我发现的资源没有什么帮助。请告诉我需要什么进一步的信息。

谢谢你。

共有1个答案

有宏邈
2023-03-14

在我的虚拟机上安装spyder后,它似乎是一个spyder特定的错误。示例1在IDLE中工作,通过命令行执行,从spyder中执行(首先保存,然后执行),但在spyder中逐行执行时不工作。

我建议只需在spyder中创建一个新文件,添加代码行,保存它,然后运行它。。

有关相关报告,请参阅:

  • https://groups.google.com/forum/#!主题/spyderlib/LP5d8QZTXd0
  • Spyder中的QtConse不能使用多重处理。经理
  • 多处理工作在Python但不是在iPython
  • https://github.com/spyder-ide/spyder/issues/1900
 类似资料:
  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind

  • 问题内容: 我想使用multiprocessing.Pool,但是multiprocessing.Pool不能在超时后中止任务。我找到了解决方案,并对其进行了一些修改。 主要修改-使用 sys.exit(1) 退出工作进程。它杀死了工作进程并杀死了工作线程,但是我不确定这个解决方案是否很好。当进程因正在运行的作业而终止时,我会遇到哪些潜在的问题? 问题答案: 停止正在运行的作业没有隐含的风险,操作

  • 问题内容: 是否有用于工作线程的类,类似于多处理模块的类? 我喜欢例如并行化地图功能的简单方法 但是,我希望这样做而不会产生新流程的开销。 我知道。但是,在我的用例中,该函数将是绑定的函数,python包装器将在实际函数调用之前为其释放。 我必须编写自己的线程池吗? 问题答案: 我刚刚发现模块中实际上 有一个基于线程的Pool接口,但是它有些隐藏并且没有正确记录。 可以通过导入 它是使用包装Pyt

  • 我有下面的代码片段,它试图在多个子进程之间分割处理。 while循环中的主进程正在调用search函数,如果队列达到阈值计数,则处理池将映射到进程函数,其中作业来自队列。我的问题是,python多处理池是在执行期间阻塞主进程,还是立即继续执行?我不想遇到这样的情况,“has_jobs_to_process()”的计算结果为true,并且在处理作业的过程中,另一组作业的计算结果为true,并且再次调

  • 问题内容: 我在一个类中有一个方法,该方法需要循环执行大量工作,我想将工作分散到我的所有核心上。 我编写了以下代码,如果我使用normal ,则可以使用,但是返回错误。 错误: AttributeError:无法腌制本地对象“ SomeClass.some_method..single” 为什么不能泡菜?我什至尝试移动到全局模块范围(不在类内部-使其独立于上下文): 我收到以下错误: Attrib

  • 问题内容: 如何使用python的多处理池处理KeyboardInterrupt事件?这是一个简单的示例: 当运行上面的代码时,按时会引发,但是该过程只是在此时挂起,我必须在外部将其杀死。 我希望能够随时按下并导致所有进程正常退出。 问题答案: 这是一个Python错误。等待threading.Condition.wait()中的条件时,从不发送KeyboardInterrupt。复制: 直到wa