网站首页 > 资源文章 正文
python并发的实现
python可以通过调用子进程和子线程两种方式实现并行。由于python的多线程只能在一个CPU核心上工作,对于多核CPU会大大浪费资源,所以都采用多进程实现pyhon并发。
python并发的实现原理
python 支持三种启动进程的方法。这些 启动方法 有
spawn
父进程会启动一个全新的 python 解释器进程。 子进程将只继承那些运行进程对象的 run() 方法所必需的资源。 特别地,来自父进程的非必需文件描述符和句柄将不会被继承。 使用此方法启动进程相比使用 fork 或 forkserver 要慢上许多。
可在Unix和Windows上使用。 Windows上的默认设置。
fork
父进程使用 os.fork() 来产生 Python 解释器分叉。子进程在开始时实际上与父进程相同。父进程的所有资源都由子进程继承。请注意,安全分叉多线程进程是棘手的。
只存在于Unix。Unix中的默认值。
forkserver
程序启动并选择* forkserver * 启动方法时,将启动服务器进程。从那时起,每当需要一个新进程时,父进程就会连接到服务器并请求它分叉一个新进程。分叉服务器进程是单线程的,因此使用 os.fork() 是安全的。没有不必要的资源被继承。
可在Unix平台上使用,支持通过Unix管道传递文件描述符。
python进程并发的常用方式
python进程并发通常采用进程池(pool)的方式调用
python并行举例(适用python2.7)
apply_async方法调用
此种方法调用灵活,可以传递多个参数,还以调用回调函数
使用方法:
apply_async(func[, args[, kwds[, callback]]])?
apply() 方法的一个变种,返回一个结果对象。这个对象可以使用get()方法取出结果
举例
#!/usr/bin/env python
from multiprocessing import Pool
import os
import time
def f(x):
time.sleep(5)
print(os.getpid())
print(os.getppid())
return 1
pool = Pool(3)
result = []
for x in range(3):
result.append(pool.apply_async(f,[x,]))
pool.close()
pool.join()
for i in result:
print(i.get())
map方法
这种方式与python的map方法一样,优点是效率高,缺点是只能有一个参数传入,不能回调,使用不灵活
使用方法:
map(func, iterable[, chunksize])?
举例:
#!/usr/bin/python env
from multiprocessing import Pool, TimeoutError
import time
import os
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
# print "[0, 1, 4,..., 81]"
print pool.map(f, range(10))
python并行的注意事项
子程序异常后,使用get()方法取值将报错.
参考:https://docs.python.org/zh-cn/2.7/library/multiprocessing.html#process-and-exceptions
参考:https://docs.python.org/zh-cn/3/library/multiprocessing.html
猜你喜欢
- 2024-10-17 python 线程安全(python线程安全的字典)
- 2024-10-17 Python实现订单超时自动取消(python自动发货)
- 2024-10-17 Python基础语法知识,3天熟悉你就牛了
- 2024-10-17 「黑马程序员」「成都校区」Python是如何进行内存管理
- 2024-10-17 Python教程:各商品种类的网购替代率如何计算?
- 2024-10-17 「学习交流」 「成都地区」Python字典底层实现原理
- 2024-10-17 阿里云PYTHON SDK的使用(阿里云服务器跑python)
- 2024-10-17 罗永浩看了都想学!Python的排序算法核心逻辑大揭秘
- 2024-10-17 Python教程:global和nonlocal关键字用法
- 2024-10-17 教你分分钟搞定Linux下yum源配置(linux如何配置yum源)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)