AmazonAWS-面向初学者的python

AmazonAWS-面向初学者的python,python,amazon-web-services,amazon-ec2,python-multithreading,Python,Amazon Web Services,Amazon Ec2,Python Multithreading,我有一个计算密集型的程序来做我打算并行化的计算。它是用python编写的,我希望使用该模块。我想得到一些帮助,了解我需要做什么,才能让一个程序从我的笔记本电脑上运行,控制整个过程 就我可以使用什么电脑而言,我有两个选择。一个是我可以通过ssh访问的计算机user@comp1.com从终端(不确定如何通过python访问它们),然后在那里运行实例,尽管我希望有一种更编程的方式来访问它们。似乎如果我运行类型应用程序,它会工作吗 我想的第二个选择是使用AWS E2C服务器。(我想这就是我需要的)。我发

我有一个计算密集型的程序来做我打算并行化的计算。它是用python编写的,我希望使用该模块。我想得到一些帮助,了解我需要做什么,才能让一个程序从我的笔记本电脑上运行,控制整个过程

就我可以使用什么电脑而言,我有两个选择。一个是我可以通过ssh访问的计算机user@comp1.com从终端(不确定如何通过python访问它们),然后在那里运行实例,尽管我希望有一种更编程的方式来访问它们。似乎如果我运行类型应用程序,它会工作吗

我想的第二个选择是使用AWS E2C服务器。(我想这就是我需要的)。我发现了我从未使用过的,但似乎提供了一个控制AWS系统的接口。我觉得我需要一些东西来在AWS上实际分配作业,可能类似于选项1(?)。我这里有点摸不着头脑

编辑:

让您了解它的可并行性:

res = []
for param in Parameters:
    res.append(FunctionA(param))
Parameters2 = FunctionB(res)
res2 = []
for param in Parameters2:
    res2.append(FunctionC(param))
return res, res2

因此,这两个循环基本上就是我可以发送许多并行运行的
param
值的地方,我知道如何重新组合它们来创建
res
,只要我知道它们来自哪个
param
。然后,我需要将它们全部分组,以获得
参数2
,然后第二部分再次可以并行。

仅当希望进程共享内存中的数据时,才需要使用多进程模块。只有在出于性能考虑而必须拥有共享内存的情况下,我才建议您这样做。python多进程应用程序的编写和调试非常繁琐

如果您正在执行分布式.net或seti@home在项目中,即使任务是计算性的,但它们是合理隔离的,您可以遵循以下过程

  • 创建一个主应用程序,将大任务分解为更小的计算块(假设任务可以分解,然后结果可以集中组合)
  • 创建从服务器接收任务的python代码(可能是一个文件或其他一次性通信,并提供如何执行的说明),并运行这些python进程的多个副本
  • 这些python进程将彼此独立地工作,处理数据,然后将结果返回给主进程,以便对结果进行排序
  • 如果需要,您可以在AWS单核实例上运行这些进程,或者使用笔记本电脑运行尽可能多的副本

    编辑:基于更新的问题

    因此,主进程将创建包含参数信息的文件(或其他一些数据结构)。要处理的文件数量与要处理的参数数量相同。这些文件将存储在名为“所需工作”的共享文件夹中

    每个python工作者(在AWS实例上)将查看所需的工作共享文件夹,寻找可用的文件来处理(或者等待主进程将文件分配给他们的套接字)

    接收需要处理的文件的python进程将处理该文件,并将结果存储在单独的共享文件夹中,其中参数作为文件结构的一部分

    主流程将查看work done文件夹中的文件,处理这些文件并生成组合响应

    整个解决方案也可以实现为套接字,其中工作人员将侦听套接字,以便主控人员向其分配工作,主控人员将等待一个套接字,以便工作人员提交响应

    基于文件的方法将需要一种方式,让工人确保他们所从事的工作不会被其他工人承担。这可以通过为每个工作人员设置单独的工作文件夹来解决,主流程将决定何时需要为该工作人员提供更多工作

    工作人员可以删除从工作文件夹中拾取的文件,主进程可以监视文件夹是否为空,并向其中添加更多工作文件


    如果您对使用套接字感到满意,那么使用套接字也会更优雅。

    您如何定义“计算密集型计算”?过早优化是一个常见的错误。如果您对多线程感兴趣,为什么不先尝试Python的类呢?即使是现在的笔记本电脑也有多核,可以做很多计算。我做了100,4 x 4矩阵乘法~1e7次,我甚至不确定我是否能在多核上做,但尝试一下。所以,我认为线程不会使用更多的核,因为GILyou是对的,线程在这里帮不了你。我在下面粗略描述的方法将是你的出发点。@remudada和evan54,我的错误。因为我还是Python新手,所以我不知道GIL,所以谢谢你。我认为这会起作用,唯一的问题是我需要把所有东西都放在一起进行中间步骤。我编辑这个问题是为了告诉你我的意思谢谢你的回答!我想知道你是否可以提供一些关于我如何从笔记本电脑控制AWS进程的见解,或者我应该在另一个问题中发布这个?理想情况下,通过pythonA单独提问是合适的,因为您需要为此使用web服务。不过我可以告诉你这很容易做到。