zoukankan      html  css  js  c++  java
  • 就业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()
  • 相关阅读:
    k8s中负载均衡器【ingress-nginx】部署
    利用procedure批量插入数据
    一次socket.error: [Errno 99] Cannot..报错排查
    k8s使用Job执行任务失败了怎么办
    采坑指南——k8s域名解析coredns问题排查过程
    如何批量删除k8s资源对象
    史上最全docker基础知识汇总
    docker镜像制作必备技能
    kubernetes垃圾回收器GarbageCollector源码分析(一)
    python标准库-日志logging
  • 原文地址:https://www.cnblogs.com/joycezhou/p/11469823.html
Copyright © 2011-2022 走看看