Почему мой скрипт на python зависает, когда я пытаюсь захватить / загрузить картинку? - PullRequest
0 голосов
/ 11 апреля 2019

Попытка загрузить фотографии с 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()

Ожидайте, что изображение будет загружено и будет напечатан оператор "after upload",Пока печатается только оператор «перед захватом», и тогда программа будет зависать при попытке выполнить

1 Ответ

0 голосов
/ 11 апреля 2019

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

import boto3

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