python multiprocessing 测试

本文介绍了一个使用Python多进程模块进行并行任务处理的例子。通过创建三个独立进程并发执行长时间运行的任务,展示了如何利用多核处理器提高程序执行效率。
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 26 09:17:30 2017

@author: congpeiqing
"""

import multiprocessing

def worker(num):
    """thread worker function"""
    print 'Worker:', num
    i = 0
    while True :
        i += 1 ;
        if i > 1000000000 :
            break 
    return

if __name__ == '__main__':
    jobs = []
    for i in range(3):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()

在windows下python会为每个JOB起一个独立的进程。

Python 的 `multiprocessing` 模块中,`Value` 类型用于在多个进程之间共享基本数据类型。它通过将数据存储在共享内存中实现跨进程访问。使用时需要指定一个类型标识符(如 `'i'` 表示整数)和初始值。 ### 使用方法 #### 基本用法 以下是一个简单的例子,展示如何创建并修改一个 `multiprocessing.Value` 对象: ```python from multiprocessing import Process, Value def worker(val): val.value = 100 if __name__ == '__main__': shared_value = Value('i', 0) p = Process(target=worker, args=(shared_value,)) p.start() p.join() print(shared_value.value) # 输出: 100 ``` 在这个例子中,主进程创建了一个共享的整数变量 `shared_value`,其初始值为 0。然后启动一个新的子进程来修改这个变量的值[^1]。 #### 多进程并发操作 当多个进程同时修改同一个 `Value` 对象时,需要注意同步问题。虽然每个进程都可以访问该对象,但没有适当的锁机制可能会导致数据竞争和不可预测的结果。可以通过 `multiprocessing.Lock` 来确保原子性: ```python from multiprocessing import Process, Value, Lock def process_task(data, lock): with lock: data.value += 1 if __name__ == '__main__': shared_value = Value('i', 0) lock = Lock() processes = [] for _ in range(10): p = Process(target=process_task, args=(shared_value, lock)) processes.append(p) p.start() for p in processes: p.join() print(f"Final value: {shared_value.value}") # 应输出: Final value: 10 ``` 此代码片段演示了如何利用 `Lock` 来保护对共享资源的访问,以避免竞态条件[^3]。 ### 注意事项 1. **类型标识符**:`Value` 需要一个类型标识符,例如 `'i'` 表示整数、`'d'` 表示浮点数等。选择正确的类型对于正确读写数据至关重要。 2. **内存模型差异**:与线程不同,在多进程中每个进程都有独立的地址空间;因此,直接修改全局变量不会影响其他进程。然而,`multiprocessing.Value` 和 `Array` 提供了一种机制,使得这些特殊对象可以在进程间共享[^3]。 3. **冻结支持**:如果你打算打包你的应用程序(比如使用 PyInstaller),则可能需要调用 `freeze_support()` 函数来保证程序能够正常运行[^2]。 4. **性能考量**:尽管 `multiprocessing.Value` 可以方便地进行跨进程通信,但在频繁更新或高并发场景下,应考虑其带来的开销以及潜在的竞争条件问题。适当引入同步机制是必要的。 5. **平台兼容性**:某些功能可能依赖于操作系统特性,特别是涉及到共享内存管理和进程间通信的部分。测试时应注意目标环境的支持情况。 6. **安全性**:由于所有参与的进程都能够修改共享的数据结构,所以必须小心处理权限控制和错误恢复策略,防止因异常终止或其他恶意行为而导致的状态不一致。 通过以上介绍可以看出,`multiprocessing.Value` 是一种非常有用的工具,它可以简化跨进程的数据交换过程。不过同时也要求开发者具备良好的并发编程知识,并且遵循最佳实践来保障程序的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值