就业DAY5_多任务_协程

判断是否可迭代

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

 gevent 图片下载

import urllib.request
import gevent
from gevent import monkey
monkey.patch_all()

def downloader(img_name,img_url):
    req = urllib.request.urlopen(img_url)
    img_content = req.read()
    with open(img_name, "wb") as f:
        f.write(img_content)
def main():
    gevent.joinall([
        gevent.spawn(downloader,"1.jpg","http://img20.360buyimg.com/babel/s1180x940_jfs/t1/51493/25/9615/95389/5d6e06c8Ef20c0dc8/fac5b4df2a2359d4.jpg"),
        gevent.spawn(downloader,"2.jpg","http://img20.360buyimg.com/mobilecms/s300x300_jfs/t3103/354/455086795/183887/79ea92ac/57b6e31cNc8c760d8.jpg!q70.jpg")
    ])
if __name__ == "__main__":
    main()
原文地址:https://www.cnblogs.com/joycezhou/p/11469823.html