多进程任务1
编辑器vim的介绍
Vim(Vi IMproved)是一个功能强大的文本编辑器,它支持多种编程语言,并提供了大量的快捷键和插件来增强编辑效率。Vim的学习曲线较陡峭,但一旦掌握,其效率将远超其他文本编辑器。
编辑器vim的使用
Vim的使用需要熟悉其基本模式(正常模式、插入模式、命令模式等)以及常用的快捷键。例如,i
键进入插入模式,Esc
键返回正常模式,:wq
保存并退出等。
软件的安装
在Linux系统中,通常使用包管理器(如apt、yum等)来安装软件。例如,要安装Vim,可以使用以下命令:
sudo apt-get update sudo apt-get install vim
软件的卸载
在Linux系统中,可以使用与安装时相同的包管理器来卸载软件。例如,要卸载Vim,可以使用以下命令:
sudo apt-get remove vim
多任务的介绍
多任务处理允许多个任务或进程在操作系统中同时运行。这可以提高系统的利用率和响应速度。
进程
进程是操作系统分配资源的基本单位,它包含了程序执行所需的所有信息(如代码、数据、堆栈等)。每个进程都有自己的地址空间和系统资源。
多进程的使用
- 导入进程包 import multiprocessing
- Process进程类的说明
在Python中,multiprocessing
模块提供了对多进程编程的支持。以下是一个简单的示例:
import multiprocessing import os def worker(name, num): print(f'Hello, {name}! I am process {os.getpid()} and my parent is {os.getppid()}.') print(f'I will count to {num}') for i in range(num): print(i) if __name__ == '__main__': p1 = multiprocessing.Process(target=worker, args=('Alice', 5)) p2 = multiprocessing.Process(target=worker, args=('Bob', 10)) p1.start() p2.start() p1.join() p2.join() print('All done!')
获取进程编号
目的:验证主进程和子进程的关系,可以得知子进程是由哪个子进程创建出来的 os.getpid() 获取当前进程编号 os.getppod() 获取当前父进程编号
os.getpid()
:获取当前进程编号os.getppid()
:获取当前父进程编号
进程执行带有参数的任务
在上面的示例中,我们通过args
参数将参数传递给worker
函数。
Process类执行任务幷给任务传参数有两种方式:
- args 表示以元组的方式给执行任务传参
- kwargs 表示以字典方式给执行任务传参
进程的注意点
- 进程之间不共享全局变量:每个进程都有自己的内存空间,因此它们不能直接访问其他进程的全局变量。如果需要共享数据,可以使用管道、队列、共享内存等方式。
- 主进程会等待所有子进程完成以后再退出:默认情况下,主进程会等待所有子进程完成后再退出。如果希望主进程不等待子进程,可以将子进程设置为守护进程(
sub_process.daemon = True
)。但请注意,守护进程在主进程退出时会被立即销毁,因此如果子进程还需要完成一些重要的清理工作,那么不应该将其设置为守护进程。
另外,还可以使用sub_process.terminate()
来强制结束一个子进程。但请注意,这只是一种暴力结束进程的方式,可能会导致数据丢失或其他未预期的问题。因此,在可能的情况下,最好使用更温和的方式来结束进程(如发送一个信号让子进程自己退出)。