avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • 大模型应用
  • 常用软件/工具
  • Halo
  • 关于
Home python多进程多线程下的计数及日志打印
文章

python多进程多线程下的计数及日志打印

Posted 2025-02-25 Updated 2025-02- 25
By Administrator
6~7 min read


注意点:

  1. 需要保证在多进程内的进程锁是同一个

  2. 需要保证在单进程中的多线程内线程锁是同一个

# logger.py
import multiprocessing
import threading
​
​
class Logger_test:
    def __init__(self, process_lock):
        self.counter = multiprocessing.Value('i', 0)  # 共享计数器
        self.process_lock = process_lock  # 进程锁
        self.thread_lock = None
​
    def set_thread_lock(self, thread_lock):
        self.thread_lock = thread_lock
​
    def increment(self):
        with self.process_lock:  # 确保跨进程安全
            with self.thread_lock:  # 确保同一进程内线程安全
                self.counter.value += 1
                print(self.counter.value, end="\n")
                return self.counter.value
​
    def get_count(self):
        with self.process_lock:
            return self.counter.value
​

# main.py
import multiprocessing
import threading
from logger import Logger_test
​
​
def thread_task(logger):
    for _ in range(100):
        num = logger.increment()
​
​
def process_task(p_logger):
    threads = []
    t_lock = threading.Lock()
    p_logger.set_thread_lock(t_lock)
    for _ in range(5):  # 每个进程启动5个线程
        thread = threading.Thread(target=thread_task, args=(p_logger,))
        threads.append(thread)
        thread.start()
​
    for thread in threads:
        thread.join()
​
​
if __name__ == "__main__":
    process_lock = multiprocessing.Lock()
    logger = Logger_test(process_lock)
​
    processes = []
    for _ in range(10):  # 启动3个进程
        process = multiprocessing.Process(target=process_task, args=(logger,))
        processes.append(process)
        process.start()
​
    for process in processes:
        process.join()
​
    print(f"最终计数器值: {logger.get_count()}")
​
​

python
python
License:  CC BY 4.0
Share

Further Reading

Apr 21, 2025

Typing

类型注释让python 有了更好的编辑器提示功能。 基础使用 对函数参数和返回值,进行类型注释 def surface_area_of_cube(edge_length: float) -> str:    return f"The surface area of the cube is {6 *

Feb 25, 2025

python多进程多线程下的计数及日志打印

注意点: 需要保证在多进程内的进程锁是同一个 需要保证在单进程中的多线程内线程锁是同一个 # logger.py import multiprocessing import threading ​ ​ class Logger_test:    def __init__(self, process

Dec 25, 2022

python-迭代器、生成器、协程

迭代器 Python中当容器对象提供了对迭代的支持时,可以通过container.__iter__()来返回一个迭代器对象。 迭代器需要支持以下两个方法,这两个方法共同构成了迭代器协议: iterator.__iter__() 该方法返回迭代器本身,这个方法是配合for和in使用所必须的。 iter

OLDER

Docker的常用命令

NEWER

deep-searcher 、deep-research对比

Recently Updated

  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发配置优化
  • Typing
  • 大模型返回中json_schema与json_mode的区别
  • Async

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy