Есть ли способ отобразить предупреждение только один раз при использовании многопроцессорной обработки 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: перехват предупреждений во время многопроцессорной обработки . На мой взгляд:
- это похоже, но не то же самое.
- решения могут быть, но не должен ответить на мой вопрос,
- это гораздо более детально и сфокусировано на некоторой более узкой задаче перехвата предупреждений при создании объектов