Почему мой скрипт на python зависает, когда я пытаюсь захватить / загрузить изображение?

#python #amazon-web-services #amazon-s3 #camera #raspberry-pi3

#python #amazon-web-services #amazon-s3 #камера #raspberry-pi3

Вопрос:

Пытаюсь загрузить фотографии с Raspberry Pi в AWS S3, но столкнулся с парой ошибок. Программа зависнет при загрузке изображения в AWS.

Попытался переместить его в отдельный скрипт и вызвать его в программе и поместить его в качестве начальной строки программы. Каждый из них приводил к зависанию программы при загрузке. Когда скрипт запускается сам по себе, он будет работать.

 import ssl
import time
import json
import gpiozero
import boto3
import picamera
import pic

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient
def main():
    pic.capture('pi.png')

    myShadowClient = AWSIoTMQTTShadowClient(CLIENT ID)

    myShadowClient.configureEndpoint(ENDPOINT, PORT NUMBER)

       myShadowClient.configureCredentials(ROOT CA,/PRIVATE KEY ,CERTIFICATION)

    myDeviceShadow = myShadowClient.createShadowHandlerWithName("ThingName", True)
    myShadowClient.configureConnectDisconnectTimeout(10)  # 10 sec
    myShadowClient.configureMQTTOperationTimeout(5)  # 5 sec
    myShadowClient.connect(1200) #Print this out on
    #s3.upload_file('pipic.png',bucket_name,'pipic.png')
    #s3.upload_file('test5.png',bucket_name,'test5.png')

    while True:
        myDeviceShadow.shadowGet(customShadowCallback_Update, 5)
        time.sleep(5)
  

pic.py

 import picamera
import boto3

camera = picamera.PiCamera()
def capture(filename):
    camera.capture(filename)


s3 = boto3.client(CLIENTID, ACCESS KEY ID, SECRET ACCESS KEY)
bucket_name = ''
for y in range(20):
    print("before capture")
    capture(str(y) 'pi.png')
    s3.upload_file(str(y) 'pi.png',bucket_name, str(y) 'pi.png')
    print("after upload")
camera.close()
  

Ожидайте, что изображение будет загружено, и распечатайте инструкцию «после загрузки». Пока печатается только оператор «before capture», а затем программа зависает при попытке u

Ответ №1:

Чтобы создать клиента boto3 , используйте:

 import boto3

client = boto3.client(
    's3',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY
)