• 进程


    '''
    多进程:
    multiprocessing.Process(target=模块或类 ,args=())

    Queue():队列
    跟线程完全不相同
    q = multiprocessing.Queue
    m1 = multiprocessing.Process(target=f,#args=queue#)重要
    因为进程不能共享数据 需要把Q传到子进程中才能共享数据 也就是可以put出来内容
    创建进程 类式调用 进程之间的关系 queue 肯定能用上 微博就是用queue做的

    Pipe: 管道
    prent_conn主进程,child_conn子进程 = multiprocessing.Pipe()
    m1 = multiprocessing.Process(target=f,args(child_conn)) 把子进程参数f传给子进程
    prent_conn.recv 等待子进程发送的数据
    发送的是子进程 接收的是主进程 也可以子进程发给住进程 这样就是可以完成通信了

    Manager:数据共享
    from multiprocessing import process,managers
    with multiprocessing.Manager() as manager:
    d = manager.dict() #创建字典
    l = manager.list() #创建列表
    通过字典和列表的方法 进程之间的共享数据

    协程:用得好完全可以替代线程
    底层协程:
    协程是一种用户态的轻量级线程 单线程
    yield支持下的协程 yield生成器对象
    def f():
    print('ok1')
    yield 5这个可以有返回值 加上yield就是一个生成器对象
    print('ok1')
    yield 6
    gen = f()
    next(gen) next进入有yield的函数 拿到返回值 next只能拿到1个返回值
    count = yield 5
    x = gen.send(10) 把10赋给count X拿到6
    不用next x = gen.send(不能传值要传个None)不是非空 必须是空 跟next是一样的
    con = consumer('c1') 创建一个生成器对象
    con2 = consumer('c2') 同上
    p = producer() 执行函数,p是函数的返回值

    Python的协程模块:
    grl.switch(): 做的就是切换
    from gevent import greenlet
    def text1():
    grl.switch() 做的就是切换
    def text2():
    gr1.seitch()
    gr1 = greenlet(text1) #拿到greenlet对象
    gr2 = greenlet(text2)
    gr?.seitch() 调用谁的switch 就先执行谁的 目的就是切换索要执行的gr1 or gr2

    gevent.hoinall:
    gevent.hoinall([
    gevent.spawn(f=函数,httpwww.baidu.com) 用法
    gevent.spawn(bar)
    ])
    gevent。sleep()模拟io阻塞 不能用time 单线程 就等待了 time是模拟cpu的
    gevent.hoinall()这个方法就是遇到io阻塞 就切换
    ctime就是北京时间
    详见 爬校花网
    协程非常牛 非常好


    '''
    #爬校花网
    # from gevent import monkey
    #
    # monkey.patch_all() #加速模块 最大程度的监听io阻塞
    # import gevent
    # from urllib.request import urlopen
    # def foo(url):
    # print('GRT:%s'%url)
    # resp = urlopen(url)
    # data = resp.read()
    # print('%d bytes received from %s'%(len(data)),url)
    # foo(网址)






    '''
    import multiprocessing
    with multiprocessing.Manager() as manager:
    d = manager.dict() #创建字典
    l = manager.list() #创建列表

    import multiprocessing
    def f():
    print('11111111')
    if __name__ == '__main__':
    q = multiprocessing.Queue
    m1 = multiprocessing.Process(target=f)
    m1.start()

    multiprocessing.Pipe()

    '''


















  • 相关阅读:
    MTK Android 源码目录分析
    MTK Android 平台语言支持状态
    开坑了啦啦啦..
    codeforces泛做..
    用介个新的blog咯..
    【UR #5】怎样跑得更快
    【UR #5】怎样提高智商
    【集训队互测2016】消失的源代码
    口胡
    [八省联考2018]劈配
  • 原文地址:https://www.cnblogs.com/xuexihainan/p/12499122.html
Copyright © 2020-2023  润新知