Python多进程

本文介绍了Python的多进程管理,重点关注multiprocessing模块,包括join、Lock、Pipe、Queue、Array和Manager等实现进程间通信的方式。强调了Queue和Pipe在多进程通信中的优势,并详细解释了各种操作如put、get、task_done等方法的使用,同时阐述了进程数据共享的策略,如value、Array和Manager。
摘要由CSDN通过智能技术生成

Python多进程

  • 多进程就像生产者和消费者的关系一样
  • 比如统计信息:一个负责打开,一个负责处理;或者一个搜索,一个爬
  • 队列:先进先出 例如:queue
    栈:先进后出 例如:网页(打开A里的B里的C,再返回,返回的路径是C到B再到A)

multiprocess

  • multiprocessing包是Python中的多进程管理包,利用multiprocessing.Process对象来创建一个进程。
  • 当某个进程终结之后,需要让主进程等待子进程,调用join()方法
  • multiprocessing提供了Pipe和Queue,效率上更高。应优先考虑Pipe和Queue,避免使用Lock/Event/Semaphore/Condition等同步方式 (因为它们占据的不是用户进程的资源)。
  • 多进程的共享:在多线程中,可以比较容易地共享资源,比如使用全局变量或者传递参数。但在多进程情况下,由于每个进程有自己独立的内存空间,以上方法并不合适。此时我们可以通过Array(进程列表数组共享)和Manager(进程字典列表共享)的方法来共享资源。

join

让主进程等待子进程

import multiprocessing
import os


def info(title):
    print(title)
    print(__name__)
    print('father', os.getppid())
    print('self', os.getpid())
    print('--------')



if __name__ == "__main__": # 除了创建的子进程和子进程调用函数,其他的都是脚本主进程
    # info('hello')
    # 创建一个子进程调用函数
    P = multiprocessing.Process(target=info,args=('hello python',))
    P.start()
    P.join() # 和多线程一样,也是等待的意思
    print('hello word') # 若没有join则会独立运行
"""
结果:
hello python
__mp_main__
father 12500
self 8164
---------
hello word
"""

Lock

  • 进程锁,可有可无(多个进程同时对同一文件处理时可使用)
  • 作用:进程写完出去下个再进来
  • RLock 活动锁
  • Lock 锁不好就会锁死
# 当进程进行文件读写操作的时候(关键性操作的时候)需要使用锁..
from multiprocessing import Process,RLock
import multiprocessing

def _write(str_,lock):
    print(multiprocessing.current_process().name)
    # 写入文件
    path = '/D:/school/python/work/http.txt'

    # with 会自己帮你关掉
    with lock:
                # 路径   模式a:追加  # 编码模式:utf-8, gbk,gb12128
        with open(path, mode='a'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值