11from functools import partial
22from .composable import compose , composable
33from multiprocess .pool import ThreadPool , Pool
4+ from eventlet import GreenPool
45
56__all__ = [
67 'END' ,
1011 'puts' ,
1112 'process_syntax' ,
1213 'thread_syntax' ,
14+ 'green_thread_syntax' ,
1315 'p' ,
1416 't' ,
17+ 'g' ,
1518]
1619
1720def puts (data , end = "\n " ):
@@ -49,6 +52,12 @@ class ProcessSyntax(MultiTaskSyntax):
4952class ThreadSyntax (MultiTaskSyntax ):
5053 pass
5154
55+ class GreenThreadSyntax (MultiTaskSyntax ):
56+ pass
57+
58+ class EventSyntax (MultiTaskSyntax ):
59+ pass
60+
5261def multitask (fn , poolsize , data , pool_constructor ):
5362 with pool_constructor (poolsize ) as p :
5463 if not hasattr (data , '__iter__' ):
@@ -63,8 +72,14 @@ def multiprocess(fn, poolsize, data):
6372def multithread (fn , poolsize , data ):
6473 return multitask (fn , poolsize , data , ThreadPool )
6574
75+ def multigreenthread (fn , poolsize , data ):
76+ p = GreenPool (poolsize )
77+ return list (p .imap (fn , data ))
78+
79+
6680process_syntax = p = ProcessSyntax ()
6781thread_syntax = t = ThreadSyntax ()
82+ green_thread_syntax = g = GreenThreadSyntax ()
6883
6984class pipe :
7085 def __init__ (self , data = None ):
@@ -110,6 +125,8 @@ def __or__(self, rhs):
110125 self .action = compose (partial (multiprocess , rhs .func , rhs .poolsize ), self .action )
111126 elif isinstance (rhs , ThreadSyntax ):
112127 self .action = compose (partial (multithread , rhs .func , rhs .poolsize ), self .action )
128+ elif isinstance (rhs , GreenThreadSyntax ):
129+ self .action = compose (partial (multigreenthread , rhs .func , rhs .poolsize ), self .action )
113130 elif isinstance (rhs , tuple ):
114131 self .action = compose (partial (* rhs ), self .action )
115132 elif isinstance (rhs , pipe ):
0 commit comments