Python中进程

本文介绍了Python中进程的基本概念,包括进程的含义——运行中的程序,并详细讲解了两种创建进程的方法,通过multiprocessing模块的Process类。同时,讨论了进程间的数据通信问题,指出由于进程隔离性,数据通信需借助如队列等中间工具来实现。

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

一,进程的含义

什么是进程呢?
进程是指一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
简单讲就是运行中的程序。

二,创建进程的方式

第一种:

是利用multiprocessing模块导入Process类来实现具体方法看代码

from multiprocessing import Process
import time

# 创建的子程序代码
def task(name):
    print('%s is running' % name)
    time.sleep(2)
    print('%s is over' % name)


# 主程序
if __name__ == '__main__':
    #创建一个进程target是目标执行函数 arges是元组参数
    p1 = Process(target=task, args=('egon', ))
    p1.start()    # 告诉操作系统创建一个进程
    print('主程序正在运行')

第二种

import time

class MyProcess(Process):

    def __init__(self, name):
        super().__init__()
        self.name = name

    # 必须写run方法
    def run(self):
        print('%s is running' % self.name)
        time.sleep(1)
        print('%s is end' % self.name)

if __name__ == '__main__':
	#继承Process如果没有target目标方法,会自动调用带run方法
    obj = MyProcess('egon')
    obj.start()
    #obj.join()方法是等待子进程执行结束后在执行主进程
    print('主程序正在运行')

两种方法大致相同,只有略微不同
主进程正在运行

egon is running!
egon is end!

3 进程之间的数据通信

进程之间无法交互数据,因为进程与进程之间是相互隔离的,如果要实现数据的通信,可以间接的通过一些方法去实现:比如队列

队列相当于给进程间创造了一个公共管道,数据的通信通过这个管道进行。

from multiprocessing import Process,JoinableQueue
import time
import random

def producer(name, food, q):
    for i in range(1,5):
        data = '%s<%s>' % (food, i)
        time.sleep(random.randint(1, 2))
        q.put(data)
        print('[%s]造好了[%s]' % (name, data))

def consumer(name, q):
    while True:
        data = q.get()
        time.sleep(random.randint(1, 2))
        # if data is None: break
        print('[%s]吃了%s' % (name, data))
        q.task_done()

if __name__ == '__main__':
    q = JoinableQueue()
    p1 = Process(target=producer, args=('大佬', '酸奶', q))
    p2 = Process(target=producer, args=('DSB', '香蕉', q))
    c2 = Process(target=consumer, args=('SSSS', q))
    c1 = Process(target=consumer, args=('BBBB', q))
    p1.start()
    p2.start()
    # 将c1、c2设置为守护进程,当主进程结束,守护进程会跟着结束
    c1.daemon = True
    c2.daemon = True
    c1.start()
    c2.start()
    p1.join()
    p2.join()
    q.join()
    print('主程序-到此一游')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值