Отображать предупреждение только один раз с помощью многопроцессорной обработки Python - PullRequest
0 голосов
/ 08 ноября 2018

Есть ли способ отобразить предупреждение только один раз при использовании многопроцессорной обработки Pythons.Pool?

Простой пример, иллюстрирующий проблему

import multiprocessing
import warnings


def func_with_warning(data):
    warnings.warn("Warning message {}".format(data))

if __name__ == '__main__':
    data = [0, 1, 2]
    pool = multiprocessing.Pool(2)
    pool.map(func_with_warning, data)

Результат:

>> /home/user/script.py:10: UserWarning: Warning message 0
warnings.warn("Warning message {}".format(data))
/home/user/script.py:10: UserWarning: Warning message 1
warnings.warn("Warning message {}".format(data))
/home/user/script.py:10: UserWarning: Warning message 2
warnings.warn("Warning message {}".format(data))
>>

Я понимаю, что каждый порожденный процесс похож на отдельный мир Python, но, может быть, кто-то знает какой-нибудь трюк, как отображать предупреждения в таких случаях только один раз?

Кто-то предположил, что это дубликат вопроса: Python 3: перехват предупреждений во время многопроцессорной обработки . На мой взгляд:

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