线程与进程补充

本文介绍了Python中多进程和多线程的使用,特别是通过`multiprocessing`和`threading`模块实现进程和线程的创建。示例中展示了如何自定义进程类并设置键值对,以及如何使用守护进程确保主进程结束时子进程也随之结束。同时,讲解了进程的PID管理和线程的调度,强调了线程没有独立的PID,而进程可以通过PID监控其资源使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象编程

在使用多进程或者多线程时,对应模块可以直接使用,也可以继承之后,定制使用

import multiprocessing
import redis


class RedisProcess(multiprocessing.Process):
    def __init__(self, db, key, value):
        super().__init__()  # 把实例化的对象变成进程对象
        self.connect = redis.Redis(db=db)  # 指定操作的库
        self.key = key
        self.value = value

     # 设置键和值
    def set(self):
        self.connect.set(self.key,self.value)
    # 在start方法调用的时候会自动调用run方法
    def run(self):
        print(multiprocessing.current_process())
        self.set()


myReids1 = RedisProcess(0,'name','tlk')
myReids1.start()

等待子任务结束
进程或着线程添加 join 方法之后,会等待子任务结束,如果没有结束则会阻塞,直到子任务结束,
因此join一般都是放在程序的最后面

在正常情况下,主进程的结束,并不会影响子进程,但是也可以在主进程结束之后,强制终止子进程。
注意线程不能终止,只能等待结束

在Linux中,只要进程一创建,系统就会分配一个pid,在程序运行过程中,pid都不会改变。
可以通过pid查看进程对资源的使用情况,也可以通过PID来控制进程的运行。

线程还是在一个进程当中,因此不会有PID。
线程由python解释器调度,为了调度方便,会有ident,类似于操作系统中的pid。

开启守护模式之后,主进程结束,子进程会自动结束

import multiprocessing
import threading
import time

print(multiprocessing.current_process())


def new_time():
    # 格式化时间,获取当前准确时间
    return time.asctime(time.localtime(time.time()))


def fun():
    print('inner-start', new_time())
    print(multiprocessing.current_process())
    time.sleep(5)  # 休眠5秒钟,模拟耗时操作
    print('inner-end', new_time())


print('outer-start', new_time())

# t1 = threading.Thread(target=fun)
# print('before:', t1.ident)  # 未开启线程时没有id号 为None
# t1.start()
# print('after:', t1.ident)  # 查看线程id号

# p1 = multiprocessing.Process(target=fun, name='子进程1')
# print('before:', p1.pid)  # 未开启进程时没有id号 为None
# p1.start()
# print('after:', p1.pid)  # 查看进程id号

p1 = multiprocessing.Process(target=fun, name='子进程1',daemon=True) #开启守护模式(主进程结束时,子进程也结束)
# print('before:', p1.is_alive())  # 查看进程是否存在
p1.start()
# print('after:', p1.is_alive())  #

time.sleep(2)

# p1.terminate()  # 终止子进程
# p1.join()  # 主进程等待子进程的结束

print('outer-end', new_time())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一逍倾城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值