Bagaimana Mengendalikan Pembalakan dalam Aplikasi Python Berbilang Pemprosesan?

DDD
Lepaskan: 2024-10-28 02:10:31
asal
781 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!