进程.()的使用解读
更新时间为2024年02月24日09点32分40秒, 该文章的作者是埃菲尔没有塔尖。
这篇文章主要是介绍了有关进程的使用方法, 其中内容具有很强的参照价值, 希望对广大读者朋友们能够带来切实的帮助, 倘若文章之中存在错误之处或者还有诸多没有考虑周全的地方, 还请网友们不要吝惜赐教, 进行批评指正。
1.进程概念
进程被划分为资源分配的最小的单位, 它是处于程序隔离的边界位置。
CPU是通过时间片轮转的机制, 在不同的时间段里面去切换执行不同的进程的, 但是切换进程这个操作是比较耗时的, 所以就引来了一个叫轻量级进程的东西, 也就是我们常说的线程, 一个进程中是包括多个线程的, 代码流其实就是说的进程中同时跑着的多个方法体。
2.进程的状态
在工作的过程中, 任务的总数量通常情况下是大于中央处理器的物理核心数量的, 这也就是说, 在某一个具体的时间点上,必然会出现一部分任务正在被实际执行, 而同时又有另外一部分任务处于等待状态, 以便后续能够占用到中央处理器来进行执行, 这一种客观存在的现实状况, 直接导致了系统中出现了多种不同的运行状态。
3.进程的创建-
模块指的是跨平台版本的多进程模块。该模块提供了一个类。这个类用于代表一个进程对象。我们可以把这个对象理解成是一个独立的进程。它能够用来执行另外的事情。
这个部分是关于进行方法说明的。
其实创建子进程与创建线程的操作过程非常相似, 具体做法是先把需要执行的函数以及相关的参数作为输入项传递进去, 然后生成一个具体的实例对象, 最后再调用其内部的start()这一特定方法来实现启动操作。
语法结构如下: ()
所建立出来的那个具体的东西, 它经常要用到的那些操作方式如下。
创建出来的这个实例对象, 它里面有一些常用的属性。
这里存在一个代码样例。
import multiprocessingimport time
def work1():
for i in range(10):
print("work1----", i)
time.sleep(0.5)
if __name__ == '__main__':
# 创建进程
# 1. 导入 multiprocessing 模块
# 2. multiprocessing.Process() 创建子进程
# 3. start() 方法启动进程
p1 = multiprocessing.Process(group=None, target=work1)
p1.start()
for i in range(10):
print("这是主进程", i)
time.sleep(0.5)
4.进程名称获取
.()
5. 你要去把那个进程对应的pid这个数字给拿过来。
有两种方法可以获取, 你可以按照这些方法来操作。
1).().pid
2)使用 os模块的()
import multiprocessingimport time
import os
def work():
# 获取进程的名称
print(multiprocessing.current_process())
# 获取进程的pid
print(multiprocessing.current_process().pid, os.getpid())
i = 0
while i < 10:
print("work中执行", i)
time.sleep(0.5)
i = i + 1
if __name__ == '__main__':
# 获取进程的pid
print(multiprocessing.current_process())
# 创建子进程
process1 = multiprocessing.Process(group=None, target=work)
process1.start()
i = 0
while i < 10:
print("我在主线程中执行",i)
time.sleep(0.3)
i = i + 1
获取那个父对象的id, 也就是在括号空着的情况下, 去获取父进程的id。
6.在启动子进程的时候, 要把相关的参数传递给它。
给子进程传递参数, 和给子线程传递参数这两个做法, 在基本的方面上是一样的一样。
7.在进程与进程之间, 那些属于全局范畴的变量是不进行共享操作的。
import multiprocessing# 定义全局变量
num = 100
# 定义work方法,设置num1的值
def work():
global num # 在函数内部声明使用全局变量num
num = num + 1 # 对num值进行+1
print("work num = %d" % num)
# 定义work2方法,获取num1的值
def work2():
print("work2 num = %d" % num)
if __name__ == '__main__':
# 创建子进程
process1 = multiprocessing.Process(group=None, target=work, name="MyProcess")
process1.start()
# 创建第二个子进程
process2 = multiprocessing.Process(group=None, target=work2, name="MyProcess2")
process2.start()
运行结果:
work num = 101
work2 num = 100
从目前显示出来的运行结果我们可以很清楚地看到, 在work函数里面, 对num1变量所做的任何修改操作, 在随后执行的work2函数中并没有能够被获取到或者说接收过来, 此时num1的数值依然是保持原来设定的100。
因此, 基于这样的现象可以得出一个确定的结论, 也就是在不同的进程之间, 对于变量的使用权是完全独立的, 各个进程是不可以进行共享使用变量的行为的。
8.守护主进程
import multiprocessingimport time
def sub_process():
for i in range(10):
print("子进程运行中", i)
time.sleep(0.5)
if __name__ == '__main__':
# 创建子进程
p1 = multiprocessing.Process(group=None, target=sub_process, name="p1")
# 设置守护主进程
# 第一种方式:
# p1.daemon = True
# 第二种方式(最好在退出exit()前一句使用):
# p1.terminate()
# 启动
p1.start()
time.sleep(2)
print("OVER!
")
p1.terminate()
exit()
总结
以上这些内容属于个人的一点经验之谈, 目的是希望能够给到大家一个参考的作用, 同时也期望大家能够多多支持脚本之家。