def main(): group.map(hello_from, xrange(3)) print('Ordered') ogroup = Group() for i in ogroup.imap(intensive, xrange(3)): print(i) print('Unordered') igroup = Group() for i in igroup.imap_unordered(intensive, xrange(3)): print(i)
def handle_noargs(self, **options): tokens = settings.TWITTER_TOKENS num_tokens = len(tokens) group = Group() th_args=[] for account in TwitterAccount.active.all(): try: idx = cache.incr('twitter:connection:last') % num_tokens except ValueError: from random import randint idx = randint(0, num_tokens - 1) cache.set('twitter:connection:last', idx) token, token_secret = tokens[idx] conn = Twitter(domain="api.twitter.com", api_version='1', auth=OAuth(token, token_secret, settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET, ) ) th_args.append((account, conn)) group.imap(self.twitter_helper, th_args)
def get_all_nova_element_list(token,tenant_id,service_catalog,sub_function): """ Get a list of items from every compute service the user has access to. """ list = [] threads = [] subgroup = Group() for service in service_catalog: if service['type'] == 'compute': for endpoint in service.get('endpoints'): threads.append((token,tenant_id,endpoint.get('region'),endpoint.get('publicURL'))) for task in subgroup.imap(sub_function,threads): list.extend(task) print list return list
def get_all_nova_element_list(token, tenant_id, service_catalog, sub_function): """ Get a list of items from every compute service the user has access to. """ list = [] threads = [] subgroup = Group() for service in service_catalog: if service['type'] == 'compute': for endpoint in service.get('endpoints'): threads.append((token, tenant_id, endpoint.get('region'), endpoint.get('publicURL'))) for task in subgroup.imap(sub_function, threads): list.extend(task) print list return list
def get_all_swift_containers(token,tenant_id,service_catalog): """ Get a list of items from every compute service the user has access to. """ list = [] threads = [] subgroup = Group() for service in service_catalog: if service['type'] == 'object-store': for endpoint in service.get('endpoints'): threads.append((token,tenant_id,endpoint.get('region'),endpoint.get('publicURL'))) print threads for task in subgroup.imap(get_swift_containers,threads): list.extend(task) print list return list
def get_all_swift_containers(token, tenant_id, service_catalog): """ Get a list of items from every compute service the user has access to. """ list = [] threads = [] subgroup = Group() for service in service_catalog: if service['type'] == 'object-store': for endpoint in service.get('endpoints'): threads.append((token, tenant_id, endpoint.get('region'), endpoint.get('publicURL'))) print threads for task in subgroup.imap(get_swift_containers, threads): list.extend(task) print list return list
def group_parallelism(): group = Group() def hello_from(n): print("Size of group %s" % len(group)) print("Hello from Greenlet %s" % id(getcurrent())) group.map(hello_from, range(3)) def intensive(n): gevent.sleep(3 - n) return "task", n print("Ordered") ogroup = Group() for i in ogroup.imap(intensive, range(3)): print(i) print("Unordered") igroup = Group() for i in igroup.imap_unordered(intensive, range(3)): print(i)
import gevent from gevent import getcurrent from gevent.pool import Group group = Group() def hello_from(n): print('Size of group %s' % len(group)) print('Hello from Greenlet %s' % id(getcurrent())) group.map(hello_from, range(3)) def intensive(n): gevent.sleep(3-n) return 'task',n print('Orderd') ogroup = Group() for i in ogroup.imap(intensive, range(3)): # 相当于itertools.imap 将迭代器迭代每一个元素后作为参数传给func print(i) print('Unordered') igroup = Group() for i in igroup.imap_unordered(intensive, range(3)): # 返回的迭代结果应以逆序 print(i)
group.map(hello_from, xrange(3)) #map迭代方法,参数为方法和其参数 def intensive(n): gevent.sleep(3 - n) return 'task', n print('Ordered') ogroup = Group() for i in ogroup.imap(intensive, xrange(3)): #相当于 itertools.imap,返回一个迭代器, 它是调用了一个其值在输入迭代器上的函数, 返回结果. 它类似于函数 map() , 只是前者在 #任意输入迭代器结束后就停止(而不是插入None值来补全所有的输入) print(i) print('Unordered') igroup = Group() for i in igroup.imap_unordered(intensive, xrange(3)): print(i)
# group = Group() # # # def hello_from(n): # print('Size of group %s' % len(group)) # print('Hello from Greenlet %s' % id(getcurrent())) # # # group.map(hello_from, xrange(3)) def intensive(n): gevent.sleep(3 - n) return 'task', n print('Ordered') ogroup = Group() for i in ogroup.imap(intensive, xrange(3)): print(i) # print('Unordered') # # igroup = Group() # for i in igroup.imap_unordered(intensive, xrange(3)): # print(i)
from gevent.pool import Group from gevent import getcurrent group = Group() def hello_from(n): print('size of group:%s' % len(group)) print('%s' % id(getcurrent)) group.map(hello_from, range(0, 2)) def intensive(n): gevent.sleep(3 - n) return 'task', n print('Ordered') ogroup = Group() for i in ogroup.imap(intensive, range(0, 3)): print(i) print('Unordered') igroup = Group() for i in igroup.imap_unordered(intensive, range(0, 3)): print(i)
#!/usr/bin/env python #!encoding=utf8 import gevent from gevent.pool import Group def intensive(n): gevent.sleep(3 - n) return 'task', n print('Ordered') ogroup = Group() x = ogroup.imap(intensive, xrange(3)) print x for x in ogroup.imap(intensive, xrange(3)): print x import gevent from gevent.pool import Group def intensive(n): gevent.sleep(3 - n) return 'task', n igroup = Group() for i in igroup.imap_unordered(intensive, xrange(3)): print(i)
def sample_order(): group = Group() for i in group.imap(intensive, xrange(3)): print i
# 这里使用了group.map() # 这个函数来取得各spawn的返回值。map() # 是由第二个参数控制迭代次数,并且传递给第一个参数值而运行的。拿这个函数举例,这里会返回一个list构成这个list的对象就是将迭代的参数传进函数运行之后的返回值。这里得到的结果是[0, 1, 2] # 第二个例子Group().imap(): from gevent.pool import Group def intensive(n): gevent.sleep(3 - n) return 'task', n print('Ordered') ogroup = Group() x = ogroup.imap(intensive, xrange(3)) print x for x in ogroup.imap(intensive, xrange(3)): print x # 这里imap与map不一样的地方可能熟悉python基础库的同学很容易看出来,map返回list对象, 而imap返回一个iterable对象。所以如果要取得里面的值比如想打印就必须写成像代码最后一行那种。( # 或者直接包一个list让他变成map函数😂)。另外提一下imap的内部实现,其实是继承了Greenlet对象,在里面启了spawn()。imap里面还有一个挺好用的参数maxsize默认情况是没有设置的当设置了之后,会将迭代变成一批一批的执行,这里再举一个例子: def intensive(n): gevent.sleep(2) return 'task', n print('Ordered')
import gevent from gevent import getcurrent from gevent.pool import Group from random import randint group = Group() limit = 10 def hello_from(n): print('Size of group %s' % len(group)) print('Hello from Greenlet %s' % id(getcurrent())) group.map(hello_from, xrange(limit)) def intensive(n): gevent.sleep(randint(1, limit - n)) return 'task', n print('Ordered') ogroup = Group() for i in ogroup.imap(intensive, xrange(limit)): print(i) print('Unordered') igroup = Group() for i in igroup.imap_unordered(intensive, xrange(limit)): print(i)
agent['agent_url'] = url agent['options'] = agent['config'] for option in agent['options']: if option.get('resource'): service_catalog = get_service_catalog(token, tenant_id) break group = Group() threads = [] for i, option in enumerate(agent['options']): if option.get('resource'): threads.append( [token, tenant_id, service_catalog, option.get('resource'), i]) for task in group.imap(get_template_resource, threads): agent['options'][task[0]]['resource-select'] = task[1] return template('templates/agent_show', agent=agent) @route('/agent/create', method="POST") @route('/agent/create/', method="POST") def agents_create_task(): if not request.cookies.get("token") or not request.cookies.get( "tenant_id"): redirect("/login") else: token = request.get_cookie("token") tenant_id = request.get_cookie("tenant_id") error = None
from gevent import getcurrent from gevent.pool import Group group = Group() def hello_from(n): print "Size of group %s" % len(group) print "hello from greenlet %s" % id(getcurrent()) group.map(hello_from, xrange(3)) def intensive(n): gevent.sleep(3 - n) return "task", n print "Ordered" ogroup = Group() for i in ogroup.imap(intensive, xrange(3)): print i print "Unordered" igroup = Group() for i in igroup.imap_unordered(intensive, xrange(3)): print i
error="Unable to retrieve agent config: "+e[0]) agent['agent_url'] = url agent['options'] = agent['config'] for option in agent['options']: if option.get('resource'): service_catalog = get_service_catalog(token,tenant_id) break group = Group() threads = [] for i, option in enumerate(agent['options']): if option.get('resource'): threads.append([token,tenant_id,service_catalog,option.get('resource'),i]) for task in group.imap(get_template_resource,threads): agent['options'][task[0]]['resource-select'] = task[1] return template('templates/agent_show',agent=agent) @route('/agent/create', method="POST") @route('/agent/create/', method="POST") def agents_create_task(): if not request.cookies.get("token") or not request.cookies.get("tenant_id"): redirect("/login") else: token = request.get_cookie("token") tenant_id = request.get_cookie("tenant_id") error = None config = {} for input in request.forms: