多种用途

lets的Python项目详细描述


gevent的实用程序。

有几个gevent.Greenlet子类:

  • ^ TT2}$——最大化GeEnter环境中的多核使用。
  • Transparentlet–保留exc_信息,而不是打印异常

等等:

  • ObjectPool–池对象。(例如连接池)

请参阅下一个示例

示例

bcrypt

的processlet

bcrypt是一个用于散列密码的库散列非常重 CPU绑定任务你不能保证只与gevent并发。使用 Processlet取而代之:

importbcryptimportgeventfromletsimportProcesslet# bcrypt.hashpw is very heavy cpu-bound task.  it can spend a few seconds.defhash_password(password,salt=bcrypt.gensalt()):returnbcrypt.hashpw(str(password),salt)deftictoc(delay=0.1):whileTrue:print'.'gevent.sleep(delay)passwords=['alfa','bravo','charlie','delta','echo','foxtrot','golf','hotel','india','juliett','kilo','lima','mike','november','oscar','papa','quebec','romeo','sierra','tango','uniform','victor','whiskey','xray','yankee','zulu']# start tictocgevent.spawn(tictoc)# Greenlet, tictoc pauses for a few secondsgreenlet=gevent.spawn(hash_password,passwords[0])password_hash_0=greenlet.get()# Processlet, tictoc never pausesprocesslet_1=Processlet.spawn(hash_password,passwords[1])processlet_2=Processlet.spawn(hash_password,passwords[2])password_hash_1=processlet_1.get()password_hash_2=processlet_2.get()

您还可以使用ProcessPool限制子进程的数量:

importmultiprocessingfromletsimportProcessPoolpool_size=max(multiprocessing.cpu_count()-1,1)pool=ProcessPool(pool_size)password_hashes=pool.map(hash_password,passwords)

Memcached连接池

Greenlet安全连接池可以通过ObjectPool轻松实现:

importmemcachefromletsimportObjectPoolmc_pool=ObjectPool(10,memcache.Client,[('localhost',11211)])defsave(key,val):withmc_pool.reserve()asmc:mc.set(key,val)forx,password_hashinenumerate(password_hashes):gevent.spawn(save,'password_hashes[%d]'%x,password_hash)gevent.wait()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
maven通过pom文件增加最大java堆大小   java如何在Kojo IDE输出窗格中打印到同一行?   如何使用特定的JRE交付Java应用程序?   java Cordova插件调用日志找不到符号   Java上Redis哈希中的spring列表   java ThreadSafeClientConnManager不是多线程   java如何在激活器中获取IEclipseContext   java如何通过编程更改除法器偏差   在中找不到maven Java/Mvn本地资源。罐包装   JOptionPane的java用户输入验证。showInputDialog   java编辑:如何更改日期对象的日期格式?   文件编写器Java;如何覆盖   一行中包含多个值的java读取属性   java如何在安卓中使用截击上传视频