开发者社区> 问答> 正文

python多进程怎么用

python多进程怎么用

展开
收起
云计算小粉 2018-05-10 20:11:06 2117 0
1 条回答
写回答
取消 提交回答
  • 多进程
    简单了解:进程之间是独立的,是操作系统自己来维护和管理的,python通过C接口起了一个进程,多进程可以充分的利用多核CPU
    想更好的学习python吗?如果对Python感兴趣的话,可以加群308754087,学习交流,免费听课,收益多多。
    创建多进程:

    多进程间的通信:
    进程间独立,如果想相互访问,就必须有一个中间翻译,下面提供了几种进程间通信的方法
    进程Queue
    from multiprocessing import Process,Queue# import queue#子进程,内存独立,相当于数据的传递def f(subQueue): subQueue.put("雪芙")if name == '__main__': #进程Queue q = Queue() #创建进程 p = Process(target=f,args=(q,)) #执行进程 p.start() print(q.get())

    Pipe
    多进程还有一种数据传递方式叫管道原理和 Queue相同

    进程锁:虽然内存独立,但是即使是打印也会造成打印数据错误,为了防止进程间抢屏幕打印输出,加了进程锁
    from multiprocessing import Process,Lock#子进程执行方法def f(lock,num): lock.acquire() print("tztztz",num) lock.release()if name == '__main__': lock = Lock()#循环创建100个子进程 for num in range(100): Process(target=f,args=(lock,num)).start()
    进程池
    创建一个子进程相当于copy一份父进程内存数据,为了防止频繁创建,导致内存不足,所以有了进程池作为限制

    协程
    协程又称微线程,coroutne,协程是一种用户态的轻量级线程
    通俗点讲就是周末我在家里休息,假如我先洗漱,再煮饭,再下载电影看会很慢,用了协程的效果就好比,我在下载电影的时候去点火煮饭,此时我马上洗漱,等我洗漱好了,饭也好了,吃完饭了,电影下好了,我可以看了

    协程的创建和使用 :
    gevent 是一个三方库,可以轻松通过gevent实现并发同步或者异步编程.

    Author:TianTianBabyimport gevent#函数1def first(): print('运行 1') gevent.sleep(2) print('回到1')#精确的文本内容切换到 ..#函数2def second(): print('运行2') gevent.sleep(1) print('回到2')#函数3def third(): print("运行3") gevent.sleep(0) print("回到3")#创建并添加写成任务gevent.joinall([gevent.spawn(first), #生成 gevent.spawn(second), gevent.spawn(third)])

    解析:尝试运行发现,运行时间为Sleep最长的时间,也就是说协程能绕过IO,进行执行,极大的提高了效率.
    IO(从硬盘上读一块数据,从网络读数据,从内存里读一块数据) 操作不占用CPU,计算占用CPU
    协程简单爬网页 :

    协程实现socketServer:
    通过协程,我们可以写出一个socketServer,真正socketServer的底层是用多线程来实现,我们用写成写出的效率很高,而且非常节省内存

    2019-07-17 22:25:35
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载