Python基础学习 -- 同步与异步操作

Posted web安全工具库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础学习 -- 同步与异步操作相关的知识,希望对你有一定的参考价值。

一、普通的子线程创建

1、导入需要的库文件

from multiprocessing import Process

2、创建一个普通函数,输出5遍相同的内容

def funa():
    for i in range(5):
        print("我是子线程")

3、在主线程调用普通函数(子线程)

if __name__=="__main__":
    print("我是主线程")
    p=Process(target=funa)
    p.start()
    print("主线程结束")

4、运行结果

我是主线程
主线程结束
我是子线程
我是子线程
我是子线程
我是子线程
我是子线程

二、子线程如何传递参数

1、创建一个带有参数的函数

def funa(n):
    for i in range(n):
        print("我是子线程")

2、主线程调用带有参数的函数,在Process函数中传递参数,一个参数后面需要加一个逗号,否则就不是元组格式

if __name__=="__main__":
    print("我是主线程")
    p=Process(target=funa,args=(5,))
    p.start()
    print("主线程结束")

3、运行结果

我是主线程
主线程结束
我是子线程
我是子线程
我是子线程
我是子线程
我是子线程

三、同步与异步对比

1、创建一个花费时间的程序,传入几相当于让程序睡几秒

def funa(n):
    for i in range(n):
        time.sleep(1)
        print("我是a")

2、在程序运行时,获取一个时间戳time.time(),等运行结束再生成一个时间戳,减去开始生成的时间戳,就可以得到程序运行的时间。

if __name__=="__main__":
    print("我是主线程")
    s=time.time()
    a=[2,3,4]
    for i in a:
        funa(i)
    print("程序花费:",time.time()-s)

3、运行结果,大概花费了6秒

我是主线程
我是a
我是a
我是a
我是a
我是a
我是a
我是a
我是a
我是a
程序花费: 9.004536867141724

4、异步实现

def funa(n):
    for i in range(n):
        time.sleep(1)
        print("我是a")


if __name__=="__main__":
    print("我是主线程")
    s=time.time()
    a=[2,3,4]
    b=[] #存储创建好的进程
    for i in a:
        p=Process(target=funa,args=(i,))
        b.append(p)
        p.start()
    for pp in b:
        pp.join()#pp执行完join操作,主程序才结束
    print("程序花费:",time.time()-s)

5、运行结果

我是主线程
我是a
我是a
我是a
我是a
我是a
我是a
我是a
我是a
我是a
程序花费: 4.339980602264404

以上是关于Python基础学习 -- 同步与异步操作的主要内容,如果未能解决你的问题,请参考以下文章

python网络编程基础(线程与进程并行与并发同步与异步)

Python基础学习

JavaScript 系列八:同步与异步

python基础学习日志day10-

Python之路--Python基础12--异步IORedisMemcached缓存RabbitMQ队列

操作 python基础学习日志day8-socketserver