美文网首页
Python异步

Python异步

作者: FangHao | 来源:发表于2017-02-08 23:36 被阅读0次

    multiprocessing中Pool实现异步#

    关于异步与同步可以做一个例子来解释一下。

    拿爬虫为例,目前需要爬取京东、淘宝网站。同步的方法是,首先我要爬取京东网站,发送请求后等待京东网站返回它的数据,然后再爬取淘宝,再等待它返回的数据。同步是有一定顺序性的。

    异步的方式是,首先我同时向京东和淘宝两个网站发送请求,此时谁先返回数据先处理谁。由于存在了不确定性,所以这种方式可以理解为是异步的一种行为。

    使用multiprocessing中Pool来实现异步,使用的是Pool中callback的功能。
    实现代码如下:

    #coding=utf-8
    from multiprocessing import Pool
    import os,time
    
    def test():
    print('test进程pid=%s,ppid=%s'%(os.getpid(),os.getppid()))
    return 'hello world'
    time.sleep(1)
    
    def test2(args):
    print('test2进程pid=%s,ppid=%s'%(os.getpid(),os.getppid()))
    print(args)
    time.sleep(1)
    if __name__ == '__main__':
    pool = Pool()
    pool.apply_async(func = test,callback = test2)
    
    # pool.close()
    # pool.join()
    
    while True:
    print('主进程pid=%s,ppid=%s'%(os.getpid(),os.getppid()))
    time.sleep(1)
    

    运行结果如下:

    从这里我们可以发现,当callback = test2的时候,其实是通过主进程完成的。其中test()中的返回值被test2()作为参数调用,如果test()没有返回值的话,那么test2()需要将self传入,例如test2(self)

    相关文章

      网友评论

          本文标题:Python异步

          本文链接:https://www.haomeiwen.com/subject/rgobittx.html