Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Mengendalikan Pembalakan dalam Aplikasi Python Berbilang Pemprosesan?

Bagaimana Mengendalikan Pembalakan dalam Aplikasi Python Berbilang Pemprosesan?

DDD
DDDasal
2024-10-28 02:10:31858semak imbas

How to Handle Logging in Multiprocessing Python Applications?

Pelogam Berbilang Pemprosesan dalam Python

Apabila menggunakan modul pemproses berbilang Python, adalah penting untuk mempertimbangkan amalan pengelogan untuk mengelakkan ralat yang disebabkan oleh berbilang proses menulis ke pemegang fail yang sama secara serentak. Secara lalai, logger multiprocessing-aware yang disediakan oleh mp.get_logger() memastikan mekanisme penguncian yang betul dalam sys.stderr.

Walau bagaimanapun, modul yang tidak multiprocessing-aware mungkin memerlukan pengubahsuaian untuk menggunakan pengelogan multiprocessing-aware. Untuk mengelakkan perubahan ini, pertimbangkan pendekatan alternatif:

Pengendali Pengelogan Tersuai

Satu pendekatan ialah mencipta pengendali log tersuai yang menghantar log ke proses induk melalui paip. Ini membolehkan modul menggunakan modul pengelogan standard manakala proses induk mengendalikan pengelogan sebenar. Berikut ialah pelaksanaan:

<code class="python">from logging.handlers import RotatingFileHandler
import multiprocessing, threading, logging, sys, traceback

class MultiProcessingLog(logging.Handler):
    def __init__(self, name, mode, maxsize, rotate):
        logging.Handler.__init__(self)

        self._handler = RotatingFileHandler(name, mode, maxsize, rotate)
        self.queue = multiprocessing.Queue(-1)

        t = threading.Thread(target=self.receive)
        t.daemon = True
        t.start()</code>

Pengendali menerima rekod log daripada proses anak dan menulisnya ke fail menggunakan pengendali fail yang disediakan. Ini memastikan pengelogan berpusat tanpa perlu membuat perubahan pada modul bergantung.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Pembalakan dalam Aplikasi Python Berbilang Pemprosesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn