首页 > 其他 > 详细

就业DAY5_多任务_协程

时间:2019-09-06 21:42:00      阅读:81      评论:0      收藏:0      [点我收藏+]

判断是否可迭代

In [4]: from collections import Iterable

In [6]: isinstance(123,Iterable)
Out[6]: False

In [11]: isinstance((123),Iterable)
Out[11]: False

In [12]: isinstance((123,),Iterable)
Out[12]: True

In [13]: isinstance([123],Iterable)
Out[13]: True

In [14]: isinstance("123",Iterable)
Out[14]: True

In [15]: isinstance({1:1,2:2},Iterable)
Out[15]: True

技术分享图片

 

技术分享图片

 

 迭代器

nums = list()
a = 0
b = 1
i = 0
while i < 10:
    nums.append(a)
    a, b = b, a + b
    i += 1

for num in nums:
    print(num)
import time
from collections import Iterable
from collections import Iterator


class Fibonacci(object):

    def __init__(self, all_num):
        self.all_num = all_num
        self.current_num = 0
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.current_num < self.all_num:
            ret = self.a
            self.a, self.b = self.b, self.a + self.b
            self.current_num += 1
            return ret
        else:
            raise StopIteration


fibo = Fibonacci(10)

for num in fibo:
    print(num, end=" ")
def create_num(all_num):
    print("---1---")
    a, b = 0, 1
    current_num = 0
    while current_num < all_num:
        print("---2---")
        yield a  # 如果一个函数中有yield语句 那么就不是函数 而是一个生成器模板
        print("---3---")
        a, b = b, a + b
        current_num += 1
        print("---4---")

# 如果在调用函数的时候,发现这个函数中有yield 那么不是调用函数 而是创建一个生成器对象
obj = create_num(10)
# for num in obj:
#     print(num)
result = next(obj)
print(result)

技术分享图片

 

 技术分享图片

 

 

 技术分享图片

 

 技术分享图片

 

import gevent
import time
def f1(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        gevent.sleep(0.5)
def f2(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        gevent.sleep(0.5)
def f3(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        gevent.sleep(0.5)
print("--1--")
g1 = gevent.spawn(f1, 5)
print("--2--")
g2 = gevent.spawn(f2, 5)
print("--3--")
g3 = gevent.spawn(f3, 5)
print("--4--")
g1.join()
g2.join()
g3.join()

 

技术分享图片

 

 gevent demo

from gevent import monkey
import gevent
import random
import time
# 有耗时操作时需要
monkey.patch_all() # 将程序中用到的耗时操作的代码,换位gevent中自己实现的模块


def f1(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        time.sleep(random.random())


def f2(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        time.sleep(random.random())


def f3(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        time.sleep(random.random())


gevent.joinall([
    gevent.spawn(f1, 5),
    gevent.spawn(f2, 5),
    gevent.spawn(f3, 5)
])

 

就业DAY5_多任务_协程

原文:https://www.cnblogs.com/joycezhou/p/11469823.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!