`
小麦麦子
  • 浏览: 30641 次
文章分类
社区版块
存档分类
最新评论

Gevent中信号量的使用

阅读更多

greenlet间同步方法:信号量

  1.为什么引入信号量;

  2.gevent信号量有哪些;

  3.编程实现。

  为何引入信号量

  信号量是一个允许Greenlet相互合作,限制并发访问或运行的低层次的同步原语。

  什么是信号量

  1.信号量有两个方法

  acquirerelease。在信号量是否已经被 acquirerelease,和拥有资源的数量之间不同,被称为此信号量的范围。如果一个信号量的范围已经降低到0,它会阻塞acquire操作直到另一个已经获得信号量的greenlet作出释放。

  2.Gevent信号量

  1Semaphore(也被称为锁);

  2BoundedSemaphore

  3)二者联系与区别。

  编程实例

  import gevent

  from gevent.pool import Pool

  from gevent.lock import BoundedSemaphore

  sem = BoundedSemaphore(1)

  def worker1(n):

  sem.acquire()

  print('worker %d acquire sem' %n)

  gevent.sleep(0)

  sem.release()

  print('woker %d release sem' %n)

  def worker2 ( n ) :

  with sem:

  print( ' worker %d acquire sem' %n )

  gevent.sleep( 0 )

  print( ' woker %d release sem ' %n )

  pool = Pool()

  pool.map( worker2 , xrange ( 0 ,5 ) )

  执行结果:



 

 

原文链接:http://www.maiziedu.com/wiki/frame/amount/

  • 大小: 26 KB
分享到:
评论

相关推荐

    python Gevent程序员指南.pdf

    - **Greenlets 定义**:Greenlets(绿色线程)是在 Gevent 中使用的轻量级协程,它们运行在主进程内部,并且被协作式调度。 - **特性**: - 协程之间的切换是协作式的,每次只有一个 Greenlet 在执行。 - 相比多...

    gevent开发指南

    Greenlets可以独立地管理状态和执行流程,可以通过同步原语(如锁、信号量等)进行协作。这些轻量级的线程可以通过gevent提供的API来创建和管理,例如gevent.joinall,它可以同步等待一组Greenlets的结束。 协程...

    gevent-0.13.8.tar.gz

    `gevent` 是一个基于`libev`事件库的Python库,它实现了Greenlet(轻量级线程)的概念,使得Python可以实现非阻塞I/O操作。`gevent`的核心是协程,这是一种用户级别的线程,允许程序在不使用操作系统线程的情况下...

    gevent,threads&async frameworks.zip

    Python的内置`threading`模块提供了创建和管理线程的接口,包括线程对象、锁、信号量等同步原语。 3. **异步框架**: 异步框架通常是指那些允许非阻塞I/O操作的编程模型,如回调、事件循环、生成器、协程等。相比...

    Python库 | gevent-1.3b1-cp35-cp35m-manylinux1_x86_64.whl

    `gevent`的核心是绿色线程(greenlet),这是一种轻量级的线程,能够在单个操作系统线程中运行,通过协作调度来实现并发执行。这个库对于编写高并发、非阻塞I/O的网络应用特别有用,如Web服务器、网络爬虫等。 在`...

    gevent:跨平台事件驱动框架(cpp 制作)

    `gevent` 使用了`greenlet`库来实现轻量级线程,也被称为绿线程。这些绿线程可以在单个操作系统线程内并发执行,通过非阻塞I/O和协作调度来提高效率。当一个greenlet阻塞时,如等待网络I/O,`gevent`会自动切换到另...

    python学习之路 精

    此外,消息队列和Celery的使用,以及如何在Flask应用中使用Celery进行后台任务处理,也是Python Web开发中常见的技术点。 在分布式系统和服务化开发方面,学习AMQP协议、深入理解RabbitMQ和Celery的工作机制,以及...

    Learning Concurrency in Python(pdf+epub+mobi+code_files).zip

    1. **线程(Threading)**:Python的`threading`模块提供了线程的基本操作,如创建线程、同步原语(锁、信号量、事件等)。线程共享同一内存空间,但要注意全局解释器锁(GIL)的存在,它限制了Python在同一时刻只有...

    python中的并发学习原书高清PDF附随书代码

    线程共享同一内存空间,因此需要注意同步问题,如使用锁、信号量等避免数据竞争。 - **进程**:Python的`multiprocessing`模块用于创建进程,每个进程拥有独立的内存空间,更安全但通信成本较高。可以使用`Pipe`和`...

    Python并发编程专题.zip

    因此,理解锁(mutexes)、信号量(semaphores)等同步原语是必要的。此外,合理地组织代码结构,避免全局变量的使用,以及正确处理异常,都是并发编程的最佳实践。 通过学习这个Python并发编程专题,你将能够熟练...

    Python实现批量检测HTTP服务的状态

    使用`signal`模块来捕捉用户的中断信号(如Ctrl+C),当用户中断时设置`quit_flag`为`True`,并打印相应的消息。 4. **核心测试函数**: ```python def test_no_http_response_exception(url): tryFlag = True ...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    线程之信号量 线程之Event 队列Queue 作业之主机批量管理 第10周 心灵分享 上节回顾 多进程 多进程Queue 多进程Pipes与Manager 进程锁与进程池详解 协程 协程Gevent 协程之爬虫 协程之Socket IO多路复用 IO模式 ...

    libevent-2.0.10-stable.tar.gz

    libevent gz包 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ...支持 I/O,定时器和信号等事件;注册事件优先级。

Global site tag (gtag.js) - Google Analytics