多进程

C语言:多进程的详细介绍 阅读详情

多进程

先来个辅助函数

from multiprocessing import Pool
import time, os, random
from functools import wraps


def timethis(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)
        end_time = time.time()
        print(end_time - start_time)
        return res

    return wrapper

系统级别的

import os

# os.getpid() : 获取自己的集成ID
# os.getppid() : 获取父进程的ID

print(f'父进程的ID:{os.getppid()}')
print(f'自己的ID: {os.getpid()}')

pid = os.fork()
print(os.getpid())

进程这样写

import os
from multiprocessing import Process


def run():
    print('child', os.getpid())


if __name__ == '__main__':
    print(os.getpid())
    p = Process(target=run)
    p.start()
    p.join()

Lock – 同时只能有一个访问我!

from multiprocessing import Process, Lock
import time


def run(lock, title):
    time.sleep(1)
    print(title)
    with lock:
        time.sleep(1)
        print(title)


if __name__ == '__main__':
    lock = Lock()
    for i in range(10):
        Process(target=run, args=(lock, i)).start()

Pool – 进程很多的话,应该用进程池

调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了

@timethis
def main():
    print(os.getpid(),'main start ===============')
    p = Pool()
    for i in range(8):
        p.apply_async(run)
    p.close()
    p.join()
    print(os.getpid(), 'main end ==================')

进程池还有种写法

with Pool(processes=28) as p:
  res = p.map(f, range(1, 20))
  print(res)

subprocess – 但很多时候,调用的是外部进程

import subprocess

r = subprocess.call(['nslookup', 'www.python.org'])
print(r)

# 如果需要交互 , 通过communicate()方法输入

p = subprocess.Popen(['nslookup'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate(b'set q=mx\npython.org\nexit\n')
print(output.decode('utf8'))

Queue – 进程通信,用队列来搞一搞

from multiprocessing import Process, Queue
import os, random, time


def fwrite(q):
    print(os.getpid(), 'task runing ')
    products = list('qwertyuiopasdfghjklzxcvbnm')
    for i in range(3):
        time.sleep(1)
        v = random.choice(products)
        q.put(v)
        print(os.getpid(), f'write {v}')


def fread(q):
    print(os.getpid(), 'read running')
    while True:
        value = q.get(True)
        print(os.getpid(), f'read {value}')


if __name__ == '__main__':
    print(os.getpid(), '**' * 20)
    q = Queue()

    pw = Process(target=fwrite, args=(q,))
    pr = Process(target=fread, args=(q,))

    pw.start()
    pr.start()

    print('我早就执行了么?')

    # 下面这两句很精髓
    # 如果没有下面两句,主进程就一路执行到底。
    # 如果没有pw.join(), 主进程直接执行 pr.terminate() 干掉了读进程。
    # pw.join()把主进程阻塞在这里,写完之后,主进程继续。
    pw.join()
    pr.terminate()
    # time.sleep(4)
    # print('主进程休息了4秒')
    # print(pr.is_alive())
    # print(pw.is_alive())

死循环 子进程 永生?

子进程 设置为 daemon 进程

pr = Process(target=fread, args=(q,))

# 注意成死掉之后,daemon进程也就跟着死了。
pr.daemon = True
pr.start()

# 如果在 daemon 基础上加上这个,那么死循环的 子进程 又能永生了。
# pr.join()

强制终结子进程

pr.terminate()

最后再明确下

  • 主进程运行结束了,子进程还在运行。 子进程 会在 父进程 的尸体上 运行到结束。

    • 当然,主进程调用 子进程的terminate() 会强行带走 子进程
    • 或者,子进程设置为 daemon , 那么就会随着主进程死去。
  • Join()的意思是:“主进程停下,等我执行完,你再继续” 。

    子进程 join 函数会阻塞主进程,让主进程在这里停下,等自己结束再继续运行。

  • Pool() 的 apply是同步的,大家一个挨一个执行,先来后到,禁止插队!

    apply_async 是异步的。只要CPU空闲了,大家快去抢CPU啊!手快有手慢无!

Python中多进程在爬虫中的使用 如何利用多进程的方法来提高Python爬虫的速度和效率。介绍了multiprocessing库的使用,并且用验证爬到的代理IP可用性作为例子来讲述多进程方法的具体使用。 阅读详情

相关推荐

Android 应用内多进程实现 单APK应用多进程

Android平台支持多进程通信,也支持应用内实现多进程,Android中,默认一个APK包就对应一个进程,其进程名就为AndroidManifest.xml文件中 指定的package名。我们可以通过Activity,Service,BroadCastReceiver,ContentProvider的android:process属性来实现单APK多进程,但是需要注意进程间内存的不可见性。

二一点 6272

多进程(Multiprocessing)

多进程(Multiprocessing) 源自莫烦python多进程教学 一、多进程的定义和优点 多进程相当于多核处理,它能弥补threading的缺点 即它可以把任务平均分配给每一个核,并且让它们同时进行。

qq_52279299的博客 8217

Python多进程——进程池的开启和多进程操作同一个List

目标网站数据量多,想赶时间多获取点东西? 数据库大批量的数据需要操作? 单纯的想要节省时间,早早下班? ............ 肯定会有人说【多线程】。Python的多线程为了数据安全设置了GIL全局解释器锁,而Python的多线程是靠并发的方式实现的,即Python只会在一个进程里永远执行一个线程。 这就导致Python多线程的多线程效率低下。举个例子,这就相当于一个人在左右横跳的吃两包薯片。只不过这个人啊,他速度很快,只要左右横跳的速度足够快,他的残影就像两个人...

CorGi_8456的博客 3993

多进程详细讲解

一、什么是多进程 相信看过我其他博客的同学已经对多线程和多进程有一个简单的了解了,下面我们简单说一下多进程。我们知道在进行较多的I/O操作时候,比如socket server之类的可以用到多线程,那么什么时候用多进程呢?我们在进行大量的密集运算时候就要用到多进程。下面我们讲解一下多进程的相关知识: (1)启动多进程,并在多进程中启动多线程 #启动多进程 import multipro...

weixin_42898819的博客 1万+

如何设计一个处理物联网设备数据流的后端系统。

设计一个处理物联网设备数据流的后端系统,需要综合考虑设备数据采集、传输、处理、存储等多个方面,保证系统能够处理海量数据,具备高可用性、扩展性和安全性。合理选择适当的技术架构和工具(如MQTT、Kafka、InfluxDB等),并确保系统能够灵活应对不断变化的业务需求和设备接入。

weixin_53227829的博客 841

一文说清STM32CubeMX中文汉化全流程(图解说明)

详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。

weixin_42499004的博客 6287

什么是多进程-多线程-多协程 ----进程和多进程

​ 用户创建出来的所有进程都是由操作系统负责,新进程的创建都是由一个已经存在的进程执 行了一个用于创建进程的系统调用而创建的 Linux中pid为0的进程,是所有进程的主进程。父进程没有调用wait()或者waitpid去获取子进程的状态,子进程的进程控制块就会依然保存在系统中国,这种进程就称之为僵尸进程。父进程退出,子进程还在运行,那么这个子进程就会成为孤儿进程,孤儿进程会被怕pid为1 的进程收养。os.fork就是用来创建子进程的方法,os.fork中就用来创建子进程的方法。...

a1991376352的博客 920

工业质检实战:用海康VisionMaster的BLOB分析搞定PCB焊点缺陷检测

本文详细介绍了如何利用海康VisionMaster平台的BLOB分析技术,构建一套针对PCB焊点缺陷的自动化视觉检测方案。文章从核心原理出发,重点阐述了如何通过动态阈值分割和模板匹配定位,克服工业现场光照不均、位置偏移等挑战,实现虚焊、漏焊等缺陷的精准、稳定检测,并提供了实战调优与系统集成的关键思路。

weixin_29091105的博客 567

多线程(Threading)和多进程(Multiprocessing)

Python多线程高并发什么是多线程基本方法函数继承使用线程同步 什么是多线程 单线程: 在程序当中,只有一个箭头指向代码从头到尾执行。 import time def sorry(): print("Sorry") time.sleep(1) if __name__ == '__main__': for i in range(5): sorry() 依次打印五个sorry,每个间隔1秒 多线程: 在一个脚本当中,一次同时运行多个程序。 import time i

Hanhahahahah的博客 4005

String+CytoScape构建PPI网络

1.下载CytoScape Cytoscape是一款专业强大好用的物生信息分析软件,主要达用于专业的研究人员使用,软件主要适用于整合模块化网络和生物科学联系网络图的绘制,支持多种文件格式,导入后就可以直接进行编辑或者分析等操作了,除此之外,软件还提供了强大的编辑工具,支持添加相应的注释信息,软件基于java环境组件打造。 下载地址:https://cytoscape.org/ 因为软件基于java...

xiaobai1_1的博客 1万+

零信任架构实战:“持续验证+动态授权”全流程解析(附策略引擎联动图)

《零信任实战指南:7图拆解核心流程与行业案例》摘要:本文通过7张架构图系统解析零信任五大核心流程:强身份认证、设备检查、动态授权、持续监控和自动降权。对比金融(重数据审计)与制造业(重物理绑定)的落地差异,指出三大常见误区及解决方案。数据显示,零信任可使安全响应提速60%,泄露成本降低45%。文章提供6个月实施路线图,强调零信任是"智能信任"体系,建议企业分阶段改造,优先保护核心系统。附赠金融/制造行业策略模板及甘特图示例。(149字)

sara_han的博客 780

PyTorch多进程模型推理

Python多进程,PyTorch多进程加速模型推理

dzw0120的博客 1万+

opencv实现“找茬”

// 111.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; #define CVX_RED CV_RGB(0xff,0x00,0x00) #define CVX_BLUE CV_RGB(0x00,0x00,0xff)//定义宏,轮廓边框颜色 in

yanHa007的专栏 2095

Python多进程

单进程示例 举例一个吃饭活动,有一碗汤和一碗饭,正常操作是一口饭一口汤(当然你先把汤或者饭一口气吃完,当我无话可说)。单进程只能是先吃完饭,再喝汤;或者是先喝完汤,再吃饭。 看代码 import time def drink(): for i in range(3): print("喝汤……") time.sleep(1) def eat(): for i in range(3): print("吃饭……") time

帅帅气气的黑猫警长 4万+

AI 小说生成器本地部署完全指南

这篇文章介绍了本地部署AI小说生成器的完整指南,主要面向网文作者、内容创作者和AI爱好者。文章从环境搭建到创作实践,详细讲解了三种主流部署方案:Ollama(推荐新手)、LMStudio(图形界面)和text-generation-webui(高级定制)。内容涵盖硬件需求、系统架构、模型选择、API对接、提示词工程等关键技术环节,并提供了小说创作的特制提示词模板和参数调优建议。文章还讨论了长篇小说管理、多模型协作等进阶技巧,以及版权伦理等法律问题。最后推荐了相关工具资源和社区论坛,帮助读者实现安全、高效、可

珂珂可爱多 2290

Python 多进程好很多

摘要:Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用g

Teman的博客 5278

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python多进程学习及实现多进程版文件复制器

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。程序是固定不变的,而进程会根据运行需要,让操作系统动态分配各种资源。另外,CPU的时间片轮转就是在切换执行不同的进程,但进程切换比较浪费时间,就引进了轻量级进程,也就是所谓的线程,一个进程包括多个线程。

2401_82928104的博客 2078

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Python】多进程

进程(Process),顾名思义,就是进行中的程序。进程是python中最小的资源分配单元,进程之间的数据,内存是不共享的,每启动一个进程,都要独立分配资源和拷贝访问的数据,所以进程的启动和销毁的代价是比较大。Python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程中可以多个线程,每条线程并行执行不同的任务。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android开发中怎样用多进程、用多进程的好处、多进程的缺陷、解决方法

1.怎样用多进程 Android多进程概念:一般情况下,一个应用程序就是一个进程,这个进程名称就是应用程序包名。我们知道进程是系统分配资源和调度的基本单位,所以每个进程都有自己独立的 资源和内存空间,别的进程是不能任意访问其他进程的内存和资源的。 如何让自己的应用拥有多个进程: 四大组件在AndroidManifest文件中注册的时候,有个属性android:process这里可以指定组件

SPENCER_HALE的博客 1万+

NodeJS多进程

NodeJS 是单线程,这是因为它的语言也就是 JavaScript 决定的,服务端的 http 请求数量是非常大的,可能几万几十万次,在处理 http 请求的时候一个错误就会导致整个进程的退出,这是灾难级的,所以需要多进程来避免这种情况的发生。

weixin_43443341的博客 1241

python多进程的理解,多进程读写公共数据,多进程并行,

1. 多进程读写公共数据,多进程并行 #公共数据 temp = np.zeros((4,12)) # 回调函数,用于多进程读写公共数据的,我的理解:多进程在回调函数这里是串行的,否则同时读写会乱掉 # 回调函数必须只有一个输入参数 def mycallback(index): i,j = index[0],index[1] temp[i,j] = i+j # 多进程处理的耗时的算法...

weixin_41457494的博客 1716

常见概念之多进程

进程是操作系统中的一个基本概念,它是程序在执行时的一个实例。那么,为什么需要使用多进程?

CherryXieのblog 1678

Android——多进程

之前我们了解了 : -----------------------------------Java——多线程浅析. -----------------------------------Android——Handler详解 -----------------------------------Android——HandlerThread浅析 -----------------------------------Java——ThreadPool线程池 让我们继续看看Android多进程: 1. 概述 默认情况

Yawn 3485
上一篇: mongodb 数据库备份恢复或迁移
下一篇: 多线程
CoolScript
博客等级 码龄9年 26粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值