小编nya*_*ger的帖子

如何使用boto3 get_object从Python获取多个对象(Python 2.7)

我在S3中保存了数以千计的对象.我的要求需要我加载这些对象的子集(在5到~3000之间)并读取每个对象的二进制内容.通过阅读boto3/AWS CLI文档,看起来不可能在一个请求中获取多个对象,所以目前我已将其实现为构造每个对象的键的循环,对象的请求然后读取对象的主体:

for column_key in outstanding_column_keys:
  try:
     s3_object_key = "%s%s-%s" % (path_prefix, key, column_key)
     data_object = self.s3_client.get_object(Bucket=bucket_key, Key=s3_object_key)
     metadata_dict = data_object["Metadata"]
     metadata_dict["key"] = column_key
     metadata_dict["version"] = float(metadata_dict["version"])
     metadata_dict["data"] = data_object["Body"].read()
     records.append(Record(metadata_dict))
   except Exception as exc:
     logger.info(exc)
if len(records) < len(column_keys):
  raise Exception("Some objects are missing!")
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我尝试获取多个对象(例如5个对象)时,我返回3,有些在我检查是否已加载所有对象时都没有处理.我在自定义异常中处理它.我想出了一个解决方案,将上面的代码片段包装在while循环中,因为我知道我需要的优秀键:

while (len(outstanding_column_keys) > 0) and (load_attempts < 10):
 for column_key in outstanding_column_keys:
  try:
     s3_object_key = "%s%s-%s" % (path_prefix, key, column_key)
     data_object = self.s3_client.get_object(Bucket=bucket_key, Key=s3_object_key)
     metadata_dict = data_object["Metadata"]
     metadata_dict["key"] = column_key
     metadata_dict["version"] = float(metadata_dict["version"])
     metadata_dict["data"] …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services python-2.7 boto3

6
推荐指数
1
解决办法
553
查看次数

在 xamarin 中关闭应用程序时接收推送通知

当应用程序完全关闭时,我正在尝试在 Xamarin 中处理 GCM 推送通知。按照 Xamarin 推送通知教程,我可以从 GCM 接收远程/推送通知,但是一旦我关闭应用程序,我就没有收到。这是我迄今为止尝试过的:

1.广播接收器:

    public class MyGCMBroadcastReceiver : BroadcastReceiver {

    public override void OnReceive (Context context, Intent intent)
    {
        Intent gcmListenerServiceIntent = new Intent(context,typeof(MyGcmListenerService));
        Console.WriteLine ("Starting Broadcast Receiver...");
        context.StartService (gcmListenerServiceIntent);
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 显现:

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="za.co.snappyhome.snappy.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
    <uses-permission android:name="android.permission.CAMERA" …
    Run Code Online (Sandbox Code Playgroud)

android google-cloud-messaging xamarin.forms

5
推荐指数
1
解决办法
3658
查看次数