`
heipark
  • 浏览: 2094566 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python多进程全局共享counter(multiprocessing包实现)

阅读更多

 

 

# -*- coding: UTF-8 -*- 

from multiprocessing import Pool, Lock, Value
import os

tests_count = 80

lock = Lock()

counter = Value('i', 0) # int type,相当于java里面的原子变量


def run(fn):
    global tests_count, lock, counter
    with lock:
        counter.value += 1

    print 'NO. (%d/%d) test start. PID: %d ' %(counter.value, tests_count,  os.getpid())
    # do something below ...


if __name__ == "__main__":
    pool = Pool(10)
    # 80个任务,会运行run()80次,每次传入xrange数组一个元素
    pool.map(run, xrange(80))
    pool.close()
    pool.join()

 

输出:

NO. (1/80) test start. PID: 23785 

NO. (2/80) test start. PID: 23785 

NO. (3/80) test start. PID: 23786 

NO. (5/80) test start. PID: 23786 

...

NO. (77/80) test start. PID: 23785 

NO. (78/80) test start. PID: 23791 

NO. (79/80) test start. PID: 23786 

 

注意事项:

如果使用multiprocessing包,则要按照它的套路走,标准库threading包里面threading.Lock()、acquire()、release()这几个同步方法不生效了,因为Pool是多进程的。上面code可以直接run

分享到:
评论

相关推荐

    Python并发编程以及系统常用模块

    由于Python的全局解释器锁(Global Interpreter Lock,GIL)的存在,导致在CPython解释器中,同一时刻只能有一个线程运行,使得Python多线程在执行多线程CPU密集型任务时,并行效果并不理想。这种情况下,开发者可以...

    Python高级编程

    5. **多线程与多进程**: Python提供了`threading`模块来处理多线程,但由于全局解释器锁(GIL)的存在,多线程在CPU密集型任务上并不能实现真正的并行。因此,对于CPU密集型任务,可以使用`multiprocessing`模块来...

    <Python编程实战:运用设计模式、并发和程序库创建高质量程序>源码

    - **线程与进程**:Python的`threading`模块用于处理多线程,而`multiprocessing`模块则支持多进程。理解两者的区别和应用场景至关重要。 - **GIL(全局解释器锁)**:Python解释器的一个特性,限制了同一时刻只能...

    python教程-04-线程的介绍.ev4.rar

    然而,Python的全局解释器锁(GIL,Global Interpreter Lock)限制了同一时刻只有一个线程能执行Python字节码,这意味着Python的多线程并不能真正实现CPU密集型任务的并行计算。为了进行并行计算,可以使用进程...

    python高级编程.pdf

    - **多进程编程**:使用`multiprocessing`模块创建多个进程。 - **进程间通信**:通过管道、队列等方式实现进程间的数据交换。 #### 第十二章:协程和异步IO - **并发、并行、同步、异步等概念**:并发执行任务的...

    一篇文章快速了解Python的GIL

    为了绕过GIL的限制,开发者通常会选择使用多进程(通过`multiprocessing`模块)、异步编程(如使用`asyncio`模块)或其他非CPython的Python实现(如PyPy)。这些替代方案可以在不同程度上帮助解决多线程编程中遇到的...

    Python高级级别

    6. **多线程与多进程(Multithreading and Multiprocessing)**:Python提供`threading`模块用于多线程,以及`multiprocessing`模块用于多进程,以实现并发执行。尽管Python的全局解释器锁(GIL)限制了多线程的性能...

    python编程测试电脑开启最大线程数实例代码

    因此,对于计算密集型任务,使用多进程(`multiprocessing`模块)可能比多线程更有效。 总结来说,这个实例代码提供了一个基础的框架来创建和管理线程,但并未直接测试电脑的最大线程数。要进行这样的测试,你需要...

    advPythonMar2021

    12. **并发和并行**:使用`multiprocessing`和`threading`库实现多进程和多线程,理解GIL(全局解释器锁)对Python并发的影响。 13. **Python标准库的深度探索**:Python标准库包含大量有用的功能,如`os`、`sys`、...

Global site tag (gtag.js) - Google Analytics