Python 多进程实践
admin
2023-07-31 00:45:39
0

多进程的方式可以增加脚本的并发处理能力, python 支持这种多进程的编程方式
在类unix系统中, python的os 模块内置了fork 函数用以创建子进程

fork 方式创建子进程

12345678910 import os print \”Process %s start …\” %(os.getpid()) pid = os.fork() if pid == 0:    print \”This is child process and my pid is %d, my father process is %d\” %(os.getpid(), os.getppid())else:    print \”This is Fater process, And Its child pid is %d\” %(pid)

执行结果

123 Process 4276 start ...This is Fater process, And Its child pid is 4277This is child process and my pid is 4277, my father process is 4276

从结果可以看到, 从pid = os.fork() 开始, 下面的部分代码运行了两次, 第一次是父进程运行, 第二次是子进程运行, 且子进程的fork的结果总是0, 所以这个也可以用来作为区分父进程或是子进程标志

那么变量在多个进程之间是否相互影响呢
import os

123456789101112131415 print \”Process %s start …\” %(os.getpid()) pid = os.fork() source = 10 if pid == 0:    print \”This is child process and my pid is %d, my father process is %d\” %(os.getpid(), os.getppid())    source = source 6    print \”child process source value is \”+str(source)else:    print \”This is Fater process, And Its child pid is %d\” %(pid)    source = source 1    print \”father process source value is \”+str(source)print \”source value is \”+str(source)

执行的结果如下:

1234567 Process 4662 start ...This is Fater process, And Its child pid is 4663This is child process and my pid is 4663, my father process is 4662father process source value is 9child process source value is 4source value is 9source value is 4

很明显, 初始值为10的source 在父进程中值 减少了 1, 为9, 而子进程明显source的初始值 是10, 也就是说多进程之间并没有什么相互影响

multiprocessing 方式创建子进程

fork 方式是仅在linux 下才有的接口, 在windows下并没有, 那么在windows下如何实现多进程呢, 这就用到了multiprocessing

multiprocessing 模块的Process 对象表示的是一个进程对象, 可以创建子进程并执行制定的函数

12345678910111213141516 from multiprocessing import Processimport os def pro_do(name, func):    print \”This is child process %d from parent process %d, and name is  %s which is used for %s\” %(os.getpid(), os.getppid(), name, func) if __name__n>name, func) if __name__ crayon-font-monaco crayon-os-pc print-yes notranslate\” data-settings=\” minimize scroll-always\” style=\” margin-top: 12px; margin-bottom: 12px; font-size: 13px !important; line-height: 15px !important;\”>

12345678910 import os print \”Process %s start …\” %(os.getpid()) pid = os.fork() if pid == 0:    print \”This is child process and my pid is %d, my father process is %d\” %(os.getpid(), os.getppid())else:    print \”This is Fater process, And Its child pid is %d\” %(pid)


执行结果

123 Process 4276 start ...This is Fater process, And Its child pid is 4277This is child process and my pid is 4277, my father process is 4276

从结果可以看到, 从pid = os.fork() 开始, 下面的部分代码运行了两次, 第一次是父进程运行, 第二次是子进程运行, 且子进程的fork的结果总是0, 所以这个也可以用来作为区分父进程或是子进程标志

那么变量在多个进程之间是否相互影响呢
import os

123456789101112131415 print \”Process %s start …\” %(os.getpid()) pid = os.fork() source = 10 if pid == 0:    print \”This is child process and my pid is %d, my father process is %d\” %(os.getpid(), os.getppid())    source = source 6    print \”child process source value is \”+str(source)else:    print \”This is Fater process, And Its child pid is %d\” %(pid)    source = source 1    print \”father process source value is \”+str(source)print \”source value is \”+str(source)

执行的结果如下:

1234567 Process 4662 start ...This is Fater process, And Its child pid is 4663This is child process and my pid is 4663, my father process is 4662father process source value is 9child process source value is 4source value is 9source value is 4

很明显, 初始值为10的source 在父进程中值 减少了 1, 为9, 而子进程明显source的初始值 是10, 也就是说多进程之间并没有什么相互影响

multiprocessing 方式创建子进程

fork 方式是仅在linux 下才有的接口, 在windows下并没有, 那么在windows下如何实现多进程呢, 这就用到了multiprocessing

multiprocessing 模块的Process 对象表示的是一个进程对象, 可以创建子进程并执行制定的函数

12345678910111213141516 from multiprocessing import Processimport os def pro_do(name, func):    print \”This is child process %d from parent process %d, and name is  %s which is used for %s\” %(os.getpid(), os.getppid(), name, func) if __name__> ==

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...