Skip to main content
Help us improve PyPI by participating in user testing. All experience levels needed!

Several gevent utilities

Project description

Utilities for gevent.

There’re several gevent.Greenlet subclasses:

  • Processlet – maximizing multi-core use in gevent environment.
  • Transparentlet – keeping exc_info rather than printing exception.

And etc.:

  • ObjectPool – pooling objects. (e.g. connection pool)

See the next examples.

Examples

Processlet for bcrypt

bcrypt is a library to hash password. That the hashing is very heavy CPU-bound task. You can’t guarantee concurrency with only gevent. Use Processlet instead:

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()

You can also limit the number of child processes with 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 connection pool

Greenlet-safe connection pool can be easily implemented by 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()

Project details


Release history Release notifications

History Node

0.1.6

History Node

0.1.5

History Node

0.1.4

History Node

0.1.3

History Node

0.1.2

History Node

0.1.1

History Node

0.1.0

History Node

0.0.28

History Node

0.0.27

History Node

0.0.26

History Node

0.0.25

History Node

0.0.24

History Node

0.0.23

History Node

0.0.22

History Node

0.0.21

History Node

0.0.20

History Node

0.0.19

History Node

0.0.18

This version
History Node

0.0.17

History Node

0.0.16

History Node

0.0.15

History Node

0.0.14

History Node

0.0.13

History Node

0.0.12

History Node

0.0.11

History Node

0.0.10

History Node

0.0.9

History Node

0.0.8

History Node

0.0.7

History Node

0.0.6

History Node

0.0.5

History Node

0.0.4

History Node

0.0.3

History Node

0.0.2

History Node

0.0.1

History Node

0.0.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
lets-0.0.17.tar.gz (9.1 kB) Copy SHA256 hash SHA256 Source None Jan 4, 2016

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page