Skip to content

Instantly share code, notes, and snippets.

@Ivoz
Created February 10, 2012 10:52
Show Gist options
  • Save Ivoz/1788743 to your computer and use it in GitHub Desktop.
Save Ivoz/1788743 to your computer and use it in GitHub Desktop.
from __future__ import print_function
import gevent
from time import sleep
def ex1():
print('Example 1')
# synchronous
def f1():
for i in xrange(10):
print('f1', i)
def f2():
for i in xrange(10):
print('f2', i)
# Spawns f1, then f2
jobs = [gevent.spawn(g) for g in [f1, f2]]
gevent.joinall(jobs)
def ex2():
print('Example 2')
# expected to be asynch (expect each to block)
def f1():
for i in xrange(10):
gevent.spawn(print, 'f1', i)
def f2():
for i in xrange(10):
gevent.spawn(print, 'f2', i)
# Spawns f1, which spawns 10 f1prints
# Spawns f2, which spawns 10 f2prints
jobs = [gevent.spawn(g) for g in [f1, f2]]
# Only collects the 2 spawns in the list exp, not the 20 others
gevent.joinall(jobs)
def ex3():
print('Example 3')
# yield asynchronously?
def f1():
jobs = []
for i in xrange(10):
jobs += [gevent.spawn(print, 'f1', i)]
gevent.joinall(jobs)
def f2():
jobs = []
for i in xrange(10):
jobs += [gevent.spawn(print, 'f2', i)]
gevent.joinall(jobs)
jobs = [gevent.spawn(g) for g in [f1, f2]]
gevent.joinall(jobs)
def ex4():
print('Example 4')
# just sleep to block
def f1():
for i in xrange(10):
print('f1', i)
gevent.sleep(0)
def f2():
for i in xrange(10):
print('f2', i)
gevent.sleep(0)
jobs = [gevent.spawn(g) for g in [f1, f2]]
gevent.joinall(jobs)
def ex5():
from itertools import chain
print('Example 5')
def f1():
for i in xrange(10):
yield gevent.spawn(print, 'f1', i)
def f2():
for i in xrange(10):
yield gevent.spawn(print, 'f2', i)
jobs = []
for (i, k) in zip(f1(), f2()):
jobs += [i]
jobs += [k]
gevent.joinall(jobs)
#ex1()
#sleep(1)
#ex2()
#sleep(1)
#ex3()
#sleep(1)
#ex4()
#sleep(1)
ex5()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment