Python的threading和multiprocessing
Python的threading
基础用法, 通过 threading.Thread() 创建线程, 然后 start() 和 join()
import time
import threading def do_something(seconds):
print('Sleeping...')
time.sleep(seconds)
print('Done') start = time.perf_counter()
threads = [] for _ in range(10):
t = threading.Thread(target = do_something, args=[1])
t.start()
threads.append(t) for t in threads:
t.join() finish = time.perf_counter()
print('Total: {}'.format(round(finish - start, 2)))
使用线程池. 使用as_completed, 可以阻塞并按完成顺序输出结果, 而直接用executor.map()会将结果收集完成后一起返回.
import time
import threading
from concurrent import futures def do_something(seconds):
print('Sleeping...')
time.sleep(seconds)
return 'Done ' + str(seconds) start = time.perf_counter()
with futures.ThreadPoolExecutor(max_workers=3) as executor:
secs = [3, 2.5, 2, 2.2, 0.5]
results = [executor.submit(do_something, sec) for sec in secs]
for f in futures.as_completed(results):
print(f.result()) # 注意区别
with futures.ThreadPoolExecutor() as executor:
secs = [3, 2.5, 2, 2.2, 0.5]
# 下面这行实际是阻塞的
results = executor.map(do_something, secs)
for result in results:
print(result) finish = time.perf_counter()
print('Total: {}'.format(round(finish - start, 2)))
.
Python的multiprocessing
.在使用multiprocessing时, 子进程里的print()是会滞后打印的.
import time
import multiprocessing
import logging def do_something(seconds):
print('Sleeping...', seconds)
time.sleep(seconds)
return 'Done ' + str(seconds) if __name__ == '__main__':
multiprocessing.log_to_stderr()
logger = multiprocessing.get_logger()
logger.setLevel(logging.INFO)
start = time.perf_counter()
secs = [3.1, 3.5, 3.1, 3.2, 3.5, 3.3]
processes = []
for sec in secs:
p = multiprocessing.Process(target=do_something, args=(sec,))
p.start()
processes.append(p) for p in processes:
p.join() finish = time.perf_counter()
print('Total: {}'.format(round(finish - start, 2)))
print() pool = multiprocessing.Pool(processes=3)
print(pool.map(do_something, secs))
finish = time.perf_counter()
print('Total: {}'.format(round(finish - start, 2)))
.
Python的threading和multiprocessing的更多相关文章
- Python 线程(threading) 进程(multiprocessing)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- python的threading和multiprocessing模块初探
转载于:http://blog.csdn.net/zhaozhi406/article/details/8137670
- python 标准库 —— 线程与同步(threading、multiprocessing)
1. 创建线程 使用 os 下的 fork() 函数调用(仅限 Unix 系统) import os print('current process (%s) starts ...' % (os.get ...
- python并发编程之multiprocessing进程(二)
python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. 系列文章 python并发编程之threading线程(一) python并 ...
- Python 线程(threading)
Python 的thread模块是比较底层的模块,Python的threading模块是对thread做了一些包装,可以更加方便的 被使用; 1. 使用threading 模块 # 示例一: 单线程执 ...
- Python之threading多线程,多进程
1.threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图 概括起来就是 IO密集型(不用CPU) 多线程计算密集型(用CPU) ...
- Python多线程 - threading
目录 1. GIL 2. API 3. 创建子线程 4. 线程同步 4.1. 有了GIL,是否还需要同步? 4.1.1. 死锁 4.1.2. 竞争条件 4.1.3. GIL去哪儿了 4.2. Lock ...
- python中threading的用法
摘自:http://blog.chinaunix.net/uid-27571599-id-3484048.html 以及:http://blog.chinaunix.net/uid-11131943- ...
- python中threading模块详解(一)
python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...
随机推荐
- [加密]非对称加密STM32实现
转自:https://blog.csdn.net/kangerdong/article/details/82432701 把所有的准备工作都做完了以后,可以将加密算法移植到我们具体的项目中去了,在ST ...
- C/C++函数调用时传参过程与可变参数实现原理
C/C++函数调用时传参过程与可变参数实现原理 C语言的经典swap问题 在学习C语言的时候,我们大都遇到过一些经典例题,这些经典例题背后所代表的是往往是C/C++背后的一些运行原理,比如下面这个示例 ...
- php组合设计模式(composite pattern)
过十点. <?php /* The composite pattern is about treating the hierarchy of objects as a single object ...
- Linux学习22-文件上传与下载(rz,sz)
前言 远程访问linux服务器的时候,我们本地电脑需要和linux服务器上有文件上传和下载的操作,如果安装过xshell和xftp工具,可以使用xftp上传文件和下载文件的操作. 如果不用xftp工具 ...
- LGOJP3193 [HNOI2008]GT考试
\(f[i][j]\)表示当前摆放到第\(i\)位,然后当前的匹配长度为\(j\) \(f[i][j]=\sum {f[i][k]*g[k][j]}\) \(g[i][j]\)表示将长度为\(i\)的 ...
- Caused by: org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 5000
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'brandControl ...
- python爬虫中遇到的问题以及解决方法
(1)运行后报错:“TypeError: cannot use a string pattern on a bytes-like” 原因:content用decode(‘utf-8’)进行解码,由by ...
- Python基础知识笔记-作用域
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的. 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python的作用域一共有4种,分别是: ...
- 利用python jieba库统计政府工作报告词频
1.安装jieba库 舍友帮装的,我也不会( ╯□╰ ) 2.上网寻找政府工作报告 3.参照课本三国演义词频统计代码编写 import jieba txt = open("D:\政府工作报告 ...
- python - django 解决 templates 模板语言语法冲突
# 在使用某个框架时发现语法与Django的模板语法冲突了,于是找到解决方案: {% verbatim %} // 被 verbatim 包裹起来的地方是不会被 django 渲染的 {% endve ...