# -*- 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的全局解释器锁(Global Interpreter Lock,GIL)的存在,导致在CPython解释器中,同一时刻只能有一个线程运行,使得Python多线程在执行多线程CPU密集型任务时,并行效果并不理想。这种情况下,开发者可以...
5. **多线程与多进程**: Python提供了`threading`模块来处理多线程,但由于全局解释器锁(GIL)的存在,多线程在CPU密集型任务上并不能实现真正的并行。因此,对于CPU密集型任务,可以使用`multiprocessing`模块来...
- **线程与进程**:Python的`threading`模块用于处理多线程,而`multiprocessing`模块则支持多进程。理解两者的区别和应用场景至关重要。 - **GIL(全局解释器锁)**:Python解释器的一个特性,限制了同一时刻只能...
然而,Python的全局解释器锁(GIL,Global Interpreter Lock)限制了同一时刻只有一个线程能执行Python字节码,这意味着Python的多线程并不能真正实现CPU密集型任务的并行计算。为了进行并行计算,可以使用进程...
- **多进程编程**:使用`multiprocessing`模块创建多个进程。 - **进程间通信**:通过管道、队列等方式实现进程间的数据交换。 #### 第十二章:协程和异步IO - **并发、并行、同步、异步等概念**:并发执行任务的...
为了绕过GIL的限制,开发者通常会选择使用多进程(通过`multiprocessing`模块)、异步编程(如使用`asyncio`模块)或其他非CPython的Python实现(如PyPy)。这些替代方案可以在不同程度上帮助解决多线程编程中遇到的...
6. **多线程与多进程(Multithreading and Multiprocessing)**:Python提供`threading`模块用于多线程,以及`multiprocessing`模块用于多进程,以实现并发执行。尽管Python的全局解释器锁(GIL)限制了多线程的性能...
因此,对于计算密集型任务,使用多进程(`multiprocessing`模块)可能比多线程更有效。 总结来说,这个实例代码提供了一个基础的框架来创建和管理线程,但并未直接测试电脑的最大线程数。要进行这样的测试,你需要...
12. **并发和并行**:使用`multiprocessing`和`threading`库实现多进程和多线程,理解GIL(全局解释器锁)对Python并发的影响。 13. **Python标准库的深度探索**:Python标准库包含大量有用的功能,如`os`、`sys`、...