python数据埋点多任务-进程

多任务编程-进程:

  • 进程是我们计算机(操作系统)分配资源的最小单位,CPU和内存
  • 进程里面至少还有一个主线程,主线程是真正处理程序
  • 实现多任务的第一种方式 => 同时创建多个进程 => 每个进程处理一个程序,所有程序同时运行
if __name__=='__main__':#会创建一个main主进程

创建进程:

#music_process=multiprocessing.Process(target=任务名)

启动进程:

music_process.start()#启动进程

进程编号:

① 方便程序的管理,每个进程都有一个唯一编号

② 获知进程与进程之间的父子关系

获取进程编号:

import os#用于获取进程相关信息
print('主:',os.getpid())#获取进程编号
print('zhu:',multiprocessing.current_process())#获取进程信息

父进程:

一个进程下创建一个新进程,前者为父进程,后者为子进程

获取父进程编号:

print('主(父进程):',os.getppid())#获取父进程编号

创建进程传参:

music_process=multiprocessing.Process(target=music,args=(5,))#创建不定长元组参数
sing_process=multiprocessing.Process(target=sing,kwargs={'count':5})#创建不定长字典参数

案例:

import  multiprocessing
import time
import os
def music(count):
    for i in range(count):
        print('主(父进程):',os.getppid())#获取父进程编号
        print('m:', os.getpid())  # 获取进程编号
        print('m:', multiprocessing.current_process())  # 获取进程信息
        print('我在听歌')
        time.sleep(0.2)
def sing(count):
    for i in range(count):
        print('s:', os.getpid())  # 获取进程编号
        print('s:', multiprocessing.current_process())  # 获取进程信息
        print('我在跳舞')
        time.sleep(0.2)
if __name__=='__main__':
    # s=time.time()
    # music()
    # sing()
    # end=time.time()
    # print(end-s)
    print('主:',os.getpid())#获取进程编号
    print('zhu:',multiprocessing.current_process())#获取进程信息
    music_process=multiprocessing.Process(target=music,args=(5,))
    sing_process=multiprocessing.Process(target=sing,kwargs={'count':5})
    s = time.time()
    music_process.start()
    sing_process.start()
    end = time.time()
    print(end - s)

注意事项:

  • 进程之间不能共享全局变量
  • 主进程会等待所有子进程执行结束再结束

join():

join():主进程等待子进程执行结束,然后再继续执行

import multiprocessing
import time
import os
def musci(count,times):
    for i in range(count):
        print('唱歌')
        time.sleep(times)
        print('当前线程的名称:',threading.current_thread().name)#输入当前线程的名称
def sing(count,times):
    for i in range(count):
        print('跳舞')
        time.sleep(times)
        print('当前线程的名称:', threading.current_thread().name)  # 输入当前线程的名称)
if __name__=='__main__':
    print(os.getpid())
    print(multiprocessing.current_process())
    musci_pass=multiprocessing.Process(target=musci,args=(5,0.2))
    sing_pass=multiprocessing.Process(target=sing,kwargs={'count':5,'times':0.2})
    streat=time.time()
    musci_pass.start()
    musci_pass.join()
    sing_pass.start()
    end=time.time()
    print(end-streat)

让子进程提前结束:

  • 把子进程设置为守护主进程:music_process.daemon=True
  • 直接销毁子进程:music_process.terminate()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值