Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 GCP/Py:确定计算引擎实例何时实际准备好使用(不是“正在运行”)_Python_Google Cloud Platform_Cloud_Ping_Gcp - Fatal编程技术网

Python GCP/Py:确定计算引擎实例何时实际准备好使用(不是“正在运行”)

Python GCP/Py:确定计算引擎实例何时实际准备好使用(不是“正在运行”),python,google-cloud-platform,cloud,ping,gcp,Python,Google Cloud Platform,Cloud,Ping,Gcp,我正在处理Google提供的示例代码,我希望确定一个实例何时可以开始工作。他们有一个操作'DONE'状态,他们有一个实例'RUNNING'状态,但在我实际使用该实例之前仍然有一个延迟。在不等待设定的时间段的情况下等待的最佳方式是什么(因为如果实例准备得更快,这会浪费时间) 我修改了他们的wait\u for\u操作函数,以便它使用isUp: # [START wait_for_operation] def wait_for_operation(compute, project, zone, op

我正在处理Google提供的示例代码,我希望确定一个实例何时可以开始工作。他们有一个操作
'DONE'
状态,他们有一个实例
'RUNNING'
状态,但在我实际使用该实例之前仍然有一个延迟。在不等待设定的时间段的情况下等待的最佳方式是什么(因为如果实例准备得更快,这会浪费时间)

我修改了他们的
wait\u for\u操作
函数,以便它使用
isUp

# [START wait_for_operation]
def wait_for_operation(compute, project, zone, operation):
    print('Waiting for operation to finish...')
    while True:
        result = compute.zoneOperations().get(
            project=project,
            zone=zone,
            operation=operation).execute()

        if result['status'] == 'DONE':
            print("done.")
            print("result:")
            print(result)
            if 'error' in result:
                raise Exception(result['error'])

            print("before ex")
            instStatus = compute.instances().get(
                project=project,
                zone=zone,
                instance='inst-test1').execute()
            print("after ex")
            if instStatus['status'] == 'RUNNING':

                if isUp("10.xxx.xx.xx"):
                    print("instStatus = ")
                    print(instStatus)
                    return result
                else:
                    print("wasn't replying to ping")
        time.sleep(1)
# [END wait_for_operation]

def isUp(hostname):

    giveFeedback = False

    if platform.system() == "Windows":
        response = os.system("ping "+hostname+" -n 1")
    else:
        response = os.system("ping -c 1 " + hostname)

    isUpBool = False
    if response == 0:
        if giveFeedback:
            print( hostname + 'is up!')
        isUpBool = True
    else:
        if giveFeedback:
            print( hostname + 'is down!')

    return isUpBool
原始
isUp
code:

大多数其他代码都源于此:

GCP状态链接:

我的代码可以工作,但是有没有更好的方法来使用实例状态或其他东西并避免整个
isUp
/ping内容?似乎我的方法是一个不必要的变通方法

很明显,我使用的是Python,这只是在代码中添加不必要的打印等等

我有一个Windows7工作站,我不想需要管理员权限和Linux实例


编辑1:“准备工作”,我的意思是我可以向它发送命令,它会响应。

您好,我建议您使用全局操作。


我使用的一种方法是在实例元数据中使用启动脚本。然后,您可以使用关于的代码检查实例状态,并查看是否添加了新的元数据。然后可以避免ping服务器。另一个好处是,如果实例没有外部ip,此方法仍然有效

instStatus = compute.instances().get(
                 project=project,
                 zone=zone,
                 instance='inst-test1').execute()

这是一个很好的问题。在这一点上似乎没有更好的方法,我的意思是他们甚至在他们的文档中承认“运行”并不意味着它实际上是可用的,但不提供任何解决方法。感谢你创造性地解决问题。对于任何仍在挣扎的人来说,这是很有帮助的。可以使用
global
regional
zonal
操作的请求在其操作上保留一个选项卡,以创建计算实例、停止现有实例等。
instStatus = compute.instances().get(
                 project=project,
                 zone=zone,
                 instance='inst-test1').execute()