Логика повтора с concurrent.futures lib

import concurrent.futures

import pymongo
import tenacity
from tenacity import stop_after_attempt


def retry_error_callback(retry_state):
    print("call when error throws ")


@tenacity.retry(stop=stop_after_attempt(2), retry_error_callback=retry_error_callback)
def sendFotaUpgradeMqttControlCommand(deviceIds):
    print(deviceIds)
    mongoClient = pymongo.MongoClient("mongdbAddress", port)
    db = mongoClient["testDB"]
    db.retryTest.insert({"retry": "success"})


def threadProcess():
    deviceId = [100, 200, 300, 400 , 100, 200, 300, 400,100, 200, 300, 400,100, 200, 300, 400,100, 200, 300, 400]

    with concurrent.futures.ProcessPoolExecutor() as executor:
        for r in executor.map(sendFotaUpgradeMqttControlCommand, deviceId):
            try:
                print(r)
            except Exception as exc:
                print(exc)

def connctDB():
    threadProcess()

if __name__ == '__main__':
    connctDB()

Я сталкиваюсь с проблемой, указанной выше, когда я устанавливаю соединение с БД, он должен вызывать ошибку проверки, но в моем случае другой поток, также пытающийся подключиться к Db, даже 1-й поток не смог подключиться к БД.

Мое требование: он должен генерировать исключение, когда первый поток не смог подключить БД. А остальные потоки не должны обрабатываться.

пожалуйста помогите

0 ответов

Другие вопросы по тегам