Как настроить тайм-аут для многопоточности? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть функция, которая анализирует документы в коллекции MongoDB. Я хотел бы установить тайм-аут для каждого потока, потому что я не знаю, займет ли function2 слишком много времени, чтобы завершить sh. Я пробовал настроить @timeout_decorator.timeout(60, use_signals=False), но, видимо, не работает.

Рассматриваются и лучшие альтернативы. Любое предложение приветствуется!

def function(collection):
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        for document in collection.find({}, no_cursor_timeout=True):
            executor.submit(function2, document)

def function2(collection, document):
    try: 
        ... something ...

1 Ответ

1 голос
/ 05 мая 2020

Поскольку вы используете executor.submit, все отправленные вами задачи возвращают объект Future, у которого есть собственный способ объявления тайм-аута.

def function(collection):
    futures = []
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        for document in collection.find({}, no_cursor_timeout=True):
            future = executor.submit(function2, document)
            futures.append(future)

futures = function(collection)
for future in concurrent.futures.as_completed(futures):
    result = future.result(timeout=60)

Дополнительную документацию можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...