设为首页 加入收藏

TOP

Python多任务教程(一)
2023-07-25 21:24:33 】 浏览:81
Tags:Python 任务教

一.并发和并行

  1. 多任务:一定时间段内,充分利用cpu资源,同时去执行多个任务

  2. 并发: 快速交替的 去执行多任务

  3. 并行: 真正同时的 去执行多任务 ,就是同时进行

二.多进程

1.多进程入门

知识点:

  1. 进程含义: 运行中的程序

  2. 进程特点: cpu资源分配的 最小单位

  3. 多进程模块: multiprocessing

  4. 进程类: Process

使用步骤:

  1. 导包 : import multiprocessing

  2. 创建对象 : 子进程对象 = multiprocessing.Process(target=任务名)

  3. 开启进程 : 子进程对象.start()

示例:

import multiprocessing
import time
# 任务1
def dance():
    for i in range(5):
        time.sleep(0.1)
        print('跳舞',i)
# 任务2
def sing():
    for i in range(5):
        time.sleep(0.3)
        print('唱歌',i)
# 多进程放到main内
if __name__ == '__main__':
    # 1.创建进程对象
    p1 = multiprocessing.Process(target=dance)
    p2 = multiprocessing.Process(target=sing)
    # 2.开启进程
    p1.start()
    p2.start()

2.os模块获取进程编号

知识点:

获取当前进程id: os.getpid()   pid: processing id

获取父进程id: os.getppid()   ppid: parent processing id

示例:

import multiprocessing
import os
import time
# 任务1
def dance():
    print('dance子进程:', os.getpid(), os.getppid())
    for i in range(5):
        time.sleep(0.1)
        print('跳舞',i)
# 任务2
def sing():
    print('sing子进程:', os.getpid(),os.getppid())
    for i in range(5):
        time.sleep(0.3)
        print('唱歌',i)
# 多进程放到main内
if __name__ == '__main__':
    print('main主进程:',os.getpid())
    # 1.创建进程对象
    p1 = multiprocessing.Process(target=dance)
    p2 = multiprocessing.Process(target=sing)
    # 2.开启进程
    p1.start()
    p2.start()

3.Process()类的传参,2种方式

知识点:

  • args: 以元组方式传参 注意:如果只有一个参数需要加逗号, 如果多个参数顺序要任务参数顺序一致

  • kwargs: 以字典方式传参 注意:需要{k:v}形式传参,k必须和任务的形参名一致

示例:

import multiprocessing
import os
import time
# 任务1
def dance(num):
    print('dance子进程:', os.getpid(), os.getppid())
    for i in range(num):
        time.sleep(0.1)
        print('跳舞',i)
# 任务2
def sing(num):
    print('sing子进程:', os.getpid(), os.getppid())
    for i in range(num):
        time.sleep(0.3)
        print('唱歌',i)
# 多进程放到main内
if __name__ == '__main__':
    print('main主进程:', os.getpid())
    # 1.创建进程对象
    p1 = multiprocessing.Process(target=dance,args=(5,))
    p2 = multiprocessing.Process(target=sing,kwargs={'num':5})
    # 2.开启进程
    p1.start()
    p2.start()

4.获取当前进程信息

知识点:

  1. 获取当前进程对象: multiprocessing.current_process()

  2. 获取当前进程name: multiprocessing.current_process().name

  3. 获取当前进程pid: multiprocessing.current_process().pid

示例:

import multiprocessing
# 任务1
def dance():
    print('dance子进程对象:', multiprocessing.current_process())
    print('dance子进程name:', multiprocessing.current_process().name)
    print('dance子进程id:', multiprocessing.current_process().pid)

# 任务2
def sing():
    print('sing子进程对象:', multiprocessing.current_process())
    print('sing子进程name:', multiprocessing.current_process().name)
    print('sing子进程id:', multiprocessing.current_process().pid)

# 多进程放到main内
if __name__ == '__main__':
    print('main主进程对象:', multiprocessing.current_process())
    print('main主进程name:', multiprocessing.current_process().name)
    print('main主进程id:', multiprocessing.current_process().pid)
    # 1.创建进程对象
    p1 = multiprocessing.Process(target=dance,name='danceProcess')
    p2 = multiprocessing.Process(target=sing,name='singProcess')
    # 2.开启进程
    p1.start()
    p2.start()

5.注意事项

1. 多进程间不能共享全局变量:

import multiprocessing

mylist = []
# 写
def write():
    global mylist
    mylist = [1,2,3,4,5]
    print('write:',mylist) # [1, 2, 3, 4, 5]
# 读
def read():
    global mylist
    print('read:',mylist)  # []  说明多个进程间不共享全局变量

# 多进程需要放到main内
if __name__ == '__main__':
    # 1.创建进程对象
    p1 = multiprocessing.Process(target=write)
    p2 = multiprocessing.Process(target=rea
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python爬虫学习——元组,字典 下一篇git 提交后Jenkins自动构建、并发..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目