Python进行多任务_进程篇

Python评论347阅读模式

多任务的执行:
并发:在一段时间内交替执行
并行:同时执行,真正意义上的同时
在python里实现多任务 使用进程来实现,进程是实现多任务的一种方式

进程:一个正在执行的软件或程序,是os进行资源分配和调度运行的基本单位。指分配资源,不会真的执行,真正执行的是线程
线程:每个进程下一定有一个主线程,来执行代码
一个进程就好像一个公司,不同公司提供不同的资源,干活的是员工,也就是线程文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

import multiprocessing
import time
def dance():
    for i in range(5):
        print('dancing')
        time.sleep(0.2)
def sing():
    for i in range(5):
        print('singing')
        time.sleep(0.2)
if __name__=='__main__':
    # 创建子进程对象 target:指定执行目标任务 name:进程名,不设置就是Process-1,group:进程组,目前不需要
    dance_process = multiprocessing.Process(target = dance)
    sing_process = multiprocessing.Process(target = sing)
    # 启动
    dance_process.start()
    sing_process.start()

进程执行带有参数的任务文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

args:以元组方式进行传参,只有一个的时候需要多加一个’,'不然会被说int不可以循环文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

kwargs:以字典方式进行传参文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

import multiprocessing
import time

def dance(num):
    for i in range(num):
        print('dancing')
        time.sleep(0.2)

def sing(num):
    for i in range(num):
        print('singing')
        time.sleep(0.2)

if __name__=='__main__':
    # 创建子进程对象 target:指定执行目标任务 name:进程名,不设置就是Process-1,group:进程组,目前不需要
    dance_process = multiprocessing.Process(target=dance, args=(3,))
    sing_process = multiprocessing.Process(target=sing, kwargs={'num': 5})
    # 启动
    dance_process.start()
    sing_process.start()

获取进程编号
os.getpid() 获取当前进程编号
os.getppid() 获取当前进程的父进程编号文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

import multiprocessing
import time
import os

def dance(num):
    print("dance's father >>>%d" % os.getppid())
    for i in range(num):
        print('dancing')
        time.sleep(0.2)

def sing(num):
    print("sing's father >>>%d" % os.getppid())
    for i in range(num):
        print('singing')
        time.sleep(0.2)

if __name__=='__main__':
    # 创建子进程对象 target:指定执行目标任务 name:进程名,不设置就是Process-1,group:进程组,目前不需要
    print("main>>>%d" % os.getpid())
    dance_process = multiprocessing.Process(target=dance, args=(2,))
    sing_process = multiprocessing.Process(target=sing, kwargs={'num': 2})
    # 启动
    dance_process.start()
    sing_process.start()

进程之间不共享全局变量
创建子进程是把主进程的资源进行拷贝,产生了一个新的进程,所以主进程、子进程相互独立,互不打扰文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

import multiprocessing
import time
# 定义全局变量
my_list = []


def write_data():
    for i in range(5):
        my_list.append(i)
        print("add:", i)
    print('write:', my_list)


def read_data():
    print('read:', my_list)


if __name__ == '__main__':
    # 创建写进程
    write_process = multiprocessing.Process(target=write_data)
    # 创建读进程
    read_process = multiprocessing.Process(target=read_data)
    write_process.start()
    time.sleep(1)
    read_process.start()

主进程和子进程的结束顺序
主进程:微信
子进程:一些聊天窗口
当直接结束主进程的时候,首先结束子进程,再结束主进程
以下是代码执行结果,即使打印了主进程结束,但还是没结束,主进程在等待子进程执行文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

import multiprocessing
import time

def work():
    for i in range(10):
        print('working...')
        time.sleep(0.2)

if __name__ == '__main__':
    work_process = multiprocessing.Process(target=work)
    work_process.start()
    time.sleep(1)
    print('main process is over')

设置守护主进程/手动销毁子进程
当把一个子进程设置为守护主进程,那么主进程不等子进程。当执行完以后,直接销毁子进程,不在执行子进程文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

def work():
    for i in range(10):
        print('working...')
        time.sleep(0.2)

if __name__ == '__main__':
    work_process = multiprocessing.Process(target=work)
    # 设置为 守护主进程
    work_process.daemon = True
    
    work_process.start()
    time.sleep(1)
    print('main process is over')
import multiprocessing
import time

def work():
    for i in range(10):
        print('working...')
        time.sleep(0.2)

if __name__ == '__main__':
    work_process = multiprocessing.Process(target=work)
    # 设置为 守护主进程
    # work_process.daemon = True

    work_process.start()
    time.sleep(1)
    # 手动销毁
    work_process.terminate()
    print('main process is over')

 文章源自爱尚资源教程网-https://www.23jcw.net/6351.html 文章源自爱尚资源教程网-https://www.23jcw.net/6351.html

相关文章
版权声明:文章图片资源来源于网络,如有侵权,请留言删除!!!
  • 温馨提示:如遇到资源下载不了,或者文章没有解决你的问题的,可以联系我们帮你处理!!!
  • 转载请务必保留本文链接:https://www.23jcw.net/6351.html

发表评论