python3.6 asyncio paramiko_Python多处理子进程挂BOTO3 PARAMIK

该博客讲述了作者在尝试通过Python脚本启动多个AWS EC2实例,执行远程脚本并在完成后终止实例的过程中遇到的问题。脚本在使用`multiprocessing.Pool`时出现进程挂起的情况,尽管在调试器中可以正常运行。问题可能涉及到进程间通信、资源管理和AWS SDK的使用。
摘要由CSDN通过智能技术生成

提前谢谢你的帮助…我卡住了!我正在尝试编写一个脚本,该脚本将启动多个进程,每个进程都执行以下操作:

1启动AWS EC2实例

2在该实例上执行脚本(AMI上的脚本)

三。脚本完成后终止实例

使用单独的vm确实是必要的,这对于另一种本地并行类型来说不是一个好的例子。在

下面的脚本可以工作,但池工作人员停止响应。我从目标名单中得到了一部分,泳池工人什么也没做。他们所处的进程仍在运行,VM在AWS上仍然是活动的,但是什么也没有发生,事情似乎挂起了。在

另外,当我使用调试器/IDE和一个池工作器逐步检查它时,它可以正常工作。当我在mp池中运行它时,它们在~2次迭代后挂起。在import postgresql

import boto3

import paramiko

import time

import os

from multiprocessing import Pool

def spin_up(target_co):

#What would happen with paramiko import here?

ec2 = boto3.resource('ec2', region_name="us-west-2")

instances = ec2.create_instances(ImageId='AMI-HERE',

MinCount=1,

MaxCount=1,

KeyName="SECRET_KEY",

InstanceType="t2.micro",

Placement={

'AvailabilityZone': 'us-west-2c'

},

SecurityGroups=[

'Internal'

]

)

i = instances[0]

print('WAITING FOR INSTANCE AVAILABILITY....')

i.wait_until_running()

print('OK.')

i.load()

k = paramiko.RSAKey.from_private_key_file('KEY_FILE_PATH.pem')

c = paramiko.SSHClient()

c.set_missing_host_key_policy(paramiko.AutoAddPolicy())

success_flag = False

attempt_counter = 0

while success_flag == False and attempt_counter < 20:

try:

c.connect(hostname=i.public_dns_name, username="ubuntu", pkey=k)

success_flag = True

except:

print('SSH Error.....Retrying.')

attempt_counter += 1

time.sleep(5)

cmd = "python3 PATH_TO_EXECUTABLE_ON_AMI.py --target {} > LOG_FILE_ON_VM".format(target_co)

transport = c.get_transport()

channel = transport.open_session()

channel.exec_command(cmd)

while(channel.exit_status < 0):

print(str(os.getpid()) + ' sleeping...')

time.sleep(60)

print('Terminating Instance....')

i.terminate()

print('Exiting....')

if __name__ == '__main__':

target_cos = ['539',

'542',

'528',

'48',

'536',

'26',

'7',

'20572',

'10',

'20',

'101',

'10023']

# PARALLEL

with Pool(processes=2) as pool:

pool.map_async(spin_up, iter(target_cos))

#are these actually required?

pool.close()

pool.join()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值