Когда ThreadPool. QueueUserWorkItem возвращает false

Вам нужны две роли. Один из которых вы не можете предоставить в Google Cloud Console своей учетной записи службы GCE по умолчанию. Запишите адрес электронной почты своей учетной записи, который вы хотите использовать.

[ОБНОВЛЕНИЕ 01/19/2019]

При создании учетных данных они не инициализируются до тех пор, пока они не потребуются (например, токен доступа не запрашивается). Чтобы предварительно инициализировать учетные данные:

auth_url = "https://www.googleapis.com/oauth2/v4/token"
headers = {}
request = google.auth.transport.requests.Request()
creds.before_request(request, "POST", auth_url, headers)

[END UPDATE]

Предоставьте своей учетной записи службы роль roles/iam.serviceAccounts.signBlob

gcloud projects add-iam-policy-binding <project-id> --member=serviceAccount:<project-id>-compute@developer.gserviceaccount.com --role=roles/iam.serviceAccounts.signBlob

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

Теперь предоставьте этой учетной записи службы роль roles/iam.serviceAccountTokenCreator

gcloud iam service-accounts add-iam-policy-binding <project-id>-compute@developer.gserviceaccount.com --member=<project-id>-compute@developer.gserviceaccount.com --role=roles/iam.serviceAccountTokenCreator

Теперь эта учетная запись службы может использовать эту учетную запись службы для создания токенов. В команде вы даете первому service_account_email привилегию использовать второй service_account_email. Думайте об этом как о делегировании. Обратите внимание, что одна роль находится на уровне проекта, а другая роль назначена самой учетной записи службы.

В моем коде я фактически создаю новую учетную запись службы и использую адрес электронной почты этой учетной записи для подписи. Я даю разрешения новой учетной записи службы (с помощью первой команды) и даю разрешение на использование новой учетной записи службы с моими учетными данными (вторая команда).

6
задан Coral Doe 1 November 2012 в 11:11
поделиться

4 ответа

В рассмотрении исходного кода в Отражателе это кажется единственной частью кода, который мог возвратить "false", вызов к следующему:

[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool AdjustThreadsInPool(uint QueueLength);
5
ответ дан 16 December 2019 в 21:48
поделиться

Это является вообразимым, что весь API (пулы потоков) становится устаревшим, когда Библиотека параллели задачи (TPL) прибывает.

1
ответ дан 16 December 2019 в 21:48
поделиться

Это - вероятно, случай "зарезервированного для будущего использования". Можно хотеть рассматривать его как отказ, но будет трудно протестировать.

Я в значительной степени рассматриваю этот метод как Пустоту/Замену.

1
ответ дан 16 December 2019 в 21:48
поделиться

верный, если метод успешно ставится в очередь; NotSupportedException брошен, если объект работы не ставится в очередь.

Обработка a return false таким же образом то, что Вы рассматриваете a NotSupportedException.

Чтобы заставить это возвращать false, используйте ложный метод или объект.
Вы хотите протестировать свой собственный код, который Вы написали, не базовый код окон. Я уверен, что Microsoft имеет много их собственных тестов уже для этого.

1
ответ дан 16 December 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: