python 多进程与多线程浅析

python多线程是伪多线程,同时间最多只有一个线程在执行,但这样并不代码python的多线程没有作用,对于IO密集型的系统,python的多线程还是能极大的提升性能~

关于python伪多线程可以去了解python GIL的概念。

以下代码涉及python多线程,多进程,进程池相关操作:

#encoding:utf-8
from multiprocessing import Pool,Manager,cpu_count,Lock,Process
import thread
import threading

def process_fun(msg):
	print 'process_fun msg:', msg
	pass

def thread_fun(msg):
	print 'thread_fun msg:', msg
	pass

if __name__ == '__main__':
	msg = 'hello world';
	#启动一个子进程
	msg = "is process"
	child_proc = Process(target=process_fun, args=(msg,))
	child_proc.start() 

	#启动一个线程 使用thread模块
	msg = "is thread using thread module"
	thread.start_new_thread(thread_fun, (msg,)) 

	#启动一个线程 使用threading模块
	msg = "is thread using threading module"
	th = threading.Thread(target=thread_fun, args=(msg,))
	th.start()

	#进程池方式
	msg = "is pool process"
	worker_count = 4
	pool = Pool(worker_count)
	for i in range(worker_count):
		pool.apply_async(process_fun, args=(msg, ))
	pool.close()
	pool.join() #主进程阻塞等待所有子进程执行完毕

执行结果如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 23:00:14

python 多进程与多线程浅析的相关文章

Python多进程和多线程是鸡肋嘛?【转】

GIL是什么 Python的代码执行由 Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行.即每个CPU在任意时刻只有一个线程在解释器中运行.对 Python虚拟机访问的控制由全局解释锁GIL控制,正是这个锁来控制同一时刻只有一个线程能够运行.——在单核CPU下的多线程其实都只是并发,不是并行 . 并发与并行区别 并发:两个或多个事件在同一时间间隔发生,或者说交替做不同事件的能力,或者说不同的代码块交替执行.

(转)python多进程、多线程编程

1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.一个线程是一个execution context(执行上下文),即一个cpu执行时所需要的一串指令. 1.1.2 线程的工作方式 假设你正在读一本书,没有读完,你想休息一下,但是你想在回来时恢复到当时读的具体进度.有一个方法就是记下页数.行数与字数这三个数值,这

第十五章 Python多进程与多线程

15.1 multiprocessing multiprocessing是多进程模块,多进程提供了任务并发性,能充分利用多核处理器.避免了GIL(全局解释锁)对资源的影响. 有以下常用类: 类 描述 Process(group=None, target=None, name=None, args=(), kwargs={}) 派生一个进程对象,然后调用start()方法启动 Pool(processes=None, initializer=None, initargs=()) 返回一个进程池对象

Python 多进程、多线程效率比较

Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 GIL 这把大锁的存在,导致执行计算密集型任务时多线程实际只能是单线程.而且由于线程之间切换的开销导致多线程往往比实际的单线程还要慢,所以在 python 中计算密集型任务通常使用多进程,因为各个进程有各自独立的 GIL,互不干扰. 而在 IO 密集型任务中,CPU 时常处于等待状态,操作系统需要

Python多进程与多线程

1.基本概念 2.多线程内容方法 3.多进程内容方法 1.基本概念 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流, 一个进程中可以并发多个线程,每条线程并行执行不同的任务.A thread is an execution context, which is all the information a CPU needs to execute a stream of instru

python多进程与多线程使用场景

多进程与多线程区别 多进程使用场景 多线程使用场景

Python多进程和多线程

多进程 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回. 想要在windows平台编写多进程,需要引入multiprocessing模块. from multiprocessing import Process import os def run_proc(name): print('child pid

python多进程和多线程---(自学中,坚持更新)

首先我们知道进程和线程最明显的区别是: 多进程环境中,每个进程有自己的进程数据,各个进程数据之间是相互独立的.一个进程可以有多个线程,多个线程共享该进程的数据. #-*- coding:utf-8 -*- import os from nt import getpid print("current id: %d" %getpid()) 输出 current id: 17452 创建进程: 创建进程,linux下用fork,和linux环境下C编程的fork函数一样,对于父进程而言,返回

python 多进程、多线程

1.多线程: 下面讲一个简单用法,这个模块比较简单,但是实际使用中会遇到很多坑 from multiprocessing import process def go(s): print "主线程 %s " % s if __name__ == "__main__": p = process.Process(target=go, args=(2,)) p.start() 2.多线程: from threading import Thread def go(s): pr