几个gevent工具
项目描述
gevent的实用工具。
有多个gevent.Greenlet子类
Processlet – 在gevent环境中最大化多核使用。
Transparentlet – 保持exc_info而不是打印异常。
等等。
ObjectPool – 对象池。 (例如连接池)
查看以下示例。
示例
bcrypt的Processlet
bcrypt 是一个用于哈希密码的库。哈希是一个非常重的CPU密集型任务。你不能只使用gevent来保证并发。请使用Processlet
import bcrypt
import gevent
from lets import Processlet
# bcrypt.hashpw is very heavy cpu-bound task. it can spend a few seconds.
def hash_password(password, salt=bcrypt.gensalt()):
return bcrypt.hashpw(str(password), salt)
def tictoc(delay=0.1):
while True:
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 tictoc
gevent.spawn(tictoc)
# Greenlet, tictoc pauses for a few seconds
greenlet = gevent.spawn(hash_password, passwords[0])
password_hash_0 = greenlet.get()
# Processlet, tictoc never pauses
processlet_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限制子进程的数量
import multiprocessing
from lets import ProcessPool
pool_size = max(multiprocessing.cpu_count() - 1, 1)
pool = ProcessPool(pool_size)
password_hashes = pool.map(hash_password, passwords)
Memcached连接池
Greenlet安全的连接池可以通过 ObjectPool轻松实现
import memcache
from lets import ObjectPool
mc_pool = ObjectPool(10, memcache.Client, [('localhost', 11211)])
def save(key, val):
with mc_pool.reserve() as mc:
mc.set(key, val)
for x, password_hash in enumerate(password_hashes):
gevent.spawn(save, 'password_hashes[%d]' % x, password_hash)
gevent.wait()
链接
项目详情
关闭
lets-0.1.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eb8eb75e2c1360dea8d2edab41722107b266738a69f8d3d067204b3e4378657e |
|
MD5 | e93dfc46adc9537bda1318b53e2c0860 |
|
BLAKE2b-256 | 926a4a60459bbda076ee1d032b5760ca94d1d6055e856bdd886e06faba023cb6 |