Python 并行编程
遇到我的Bug你要裂了
hello world
展开
-
python进程(一)之fork
Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程: import os # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以 pid = os.fork() if pid == 0: print('哈哈1') else: print(...原创 2018-04-16 22:45:39 · 253 阅读 · 0 评论 -
python协程基础知识(四)gevent 的使用
Asyncio使用的是python3,而对于2.7 的用户想用到协程可以使用到gevent 这个框架使用方法定义好任务;使用gevent.spawn添加到任务列表里面gevent阻塞到运行结束from Queue import Queueimport timefrom lxml import etreeimport requestsimport gevent...原创 2018-04-13 13:47:36 · 1315 阅读 · 0 评论 -
python协程基础知识(三)Asyncio 控制子任务Task与Future
前面已经提到怎么使用Asyncio来控制协程任务的执行,它还提供了 asyncio.Task() 类,可以在任务中使用协程。它的作用是,在同一事件循环中,多组任务被包含执行。"""Asyncio using Asyncio.Task to execute three math function in parallel"""import [email protected]...原创 2018-04-13 10:59:39 · 2994 阅读 · 0 评论 -
python协程基础知识(二)具体实现
yield的实现python2.7或者python3可执行def consumer(): r = '' while True: n = yield r if not n: return print('[CONSUMER] Consuming %s...' % n) r = '200 ...原创 2018-04-13 09:50:11 · 295 阅读 · 0 评论 -
python协程基础知识(一)
python语言的多线程有个GIL锁,对于IO阻塞方面的提速方面有很大的帮助。但是,因为机器线程的开销与切换需要计算机保存当时的状态,线程切换之间也有着资源消耗的问题,为了达到更快的任务切换,从而产生了更高效率的协程。 协程是比线程更小的单位,协程可将代码分成若干个子模块,用户可以在子模块之间进行来回切换,协程协助保存上下文的系统信息与多线程的区别:协程只有单一线程,没有用...原创 2018-04-12 18:11:33 · 245 阅读 · 0 评论 -
Python解决GIL锁的办法
GIL (Global Intercepto Lock)全局解释器锁当机器无论是有几个核心,Python多线程都只会用到其中一个核心。利用htop命令可以测试出来。这个并没有解决数据共享出现不同步的问题#-*- coding:utf-8 -*-import threading#子线程死循环def test(): while True: passt1 ...原创 2018-04-16 23:13:33 · 7696 阅读 · 0 评论 -
Python线程(四)ThreadLocal的使用
在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。使用函数传参的方法def process_student(name): std = Student(name) # std是局部变量,但是每个函数都要用它,因此必须传进去: do_task_1(std)...原创 2018-04-16 23:01:44 · 621 阅读 · 0 评论 -
Python线程(三)之生成者消费者模式
为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。 大多在消息中间件中有使用什么是生产者消费者模式 生产者消...原创 2018-04-16 22:59:34 · 234 阅读 · 0 评论 -
Python线程(二)之同步与异步
同步:就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。 “同”字从字面上容易理解为一起动作其实不是,”同”字应是指协同、协助、互相配合。如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作多个线程有序执行from threading import Thread,Lock...原创 2018-04-16 22:57:10 · 2297 阅读 · 0 评论 -
Python线程(一)线程安全互斥锁
当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。互斥锁为资源引入一个状态:锁定/非锁定。某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线...原创 2018-04-16 22:52:56 · 3145 阅读 · 0 评论 -
python进程(二)之进程间通信-Queue
Queue的使用 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息列队程序,首先用一个小实例来演示一下Queue的工作原理。#coding=utf-8from multiprocessing import Queueq=Queue(3) #初始化一个Queue对象,最多可接收三条put消息q.put("消息1") q.put("...原创 2018-04-16 22:47:53 · 204 阅读 · 0 评论 -
python多进程计算方式
0)把 numbers列表中的每一项输人数据都传给 map 2)用 pickle模块(参见本书第44条)对数据进行序列化,将其变成二进制形式。 3)通过本地套接字(localsocket),将序列化之后的数据从主解释器所在的进程,发送到子解释器所在的进程。 4)接下来,在子进程中,用 pickle对二进制数据进行反序列化操作,将其还原为 python对象。 5)引人包含 gcd函数的那个 p原创 2018-05-07 11:18:59 · 1336 阅读 · 0 评论