day-38作业-线程

1、 通过进程和queue实现简单的生产者消费者默写


import time
import random
from multiprocessing import Process, Queue, JoinableQueue


def producer(name, food, q):
    for i in range(10):
        data = '%s 制造了%s' % (name, food)
        # 模拟制造食物延迟
        time.sleep(random.randint(1, 3))
        print(data)
        q.put(food)


def consumer(name, q):
    while True:
        food = q.get()
        # 模拟吃食物延迟
        time.sleep(random.randint(1, 3))
        print('%s消费了%s' % (name, food))
        q.task_done()  # 把队列中维护的数字减一


if __name__ == '__main__':
    # q = Queue()
    # 内部存了一个数字,放一个数字会加一
    # 消费一个数字减一
    q = JoinableQueue()
    # 创造生产者
    p = Process(target=producer, args=('egon', '包子', q))
    p.start()

    p1 = Process(target=producer, args=('alex', '泔水', q))
    p1.start()

    # 创造消费者
    c = Process(target=consumer, args=('鸡哥', q))

    c.start()

    c1 = Process(target=consumer, args=('王铁蛋', q))

    c1.start()
    c2 = Process(target=consumer, args=('李铁柱', q))

    c2.start()
    # 主结束,消费进程也结束,把每个消费进程都设置成守护进程

    # 等待所有生产者生产结束,主进程再结束
    p.join()
    p1.join()
    q.join()  # 会卡再者,一直等待q队列中数据没有了,才继续往下走
    print('生产者结束了,主进程结束')

# JoinableQueue()
# 每放一个值,数字加一
# 取值不会减一,q.task_done()
# q.join()  一直阻塞,当q没有值了,才继续走

2、 代码实现开启线程两种方式

from threading import Thread, Lock
import time
import json
import random



# 方式一
class Task(Thread):
    def __init__(self, n):
        super().__init__()
        self.n = n

    def run(self) -> None:
        print(f'我是子线程{self.n}')


if __name__ == '__main__':
    a = Task('一号')
    a.start()

# 方式二

def task(n):
    print(f'我是子进程{n}')


if __name__ == '__main__':
    a = Thread(target=task, args=('一号',))
    a.start()

3、 代码实现等待子线程执行完成,主线程再继续执行

def task(n, y):
    time.sleep(y)
    print(f'我是子进程{n}')


if __name__ == '__main__':
    a = Thread(target=task, args=('一号', 2))
    a1 = Thread(target=task, args=('2号', 4))
    a.start()
    a1.start()
    a.join()
    a1.join()
    print('主进程完毕')

4、验证同一进程下多线程共享数据

count = 0


def task(x, y, z):
    global count
    time.sleep(z)
    count = y
    print(f'{x}开始执行')
    print(count)


if __name__ == '__main__':
    t = Thread(target=task, args=('线程1', 1, 5))
    t2 = Thread(target=task, args=('线程2', 2, 3))
    t.start()
    t2.start()
    print(count)
    t.join()
    print(count)
    t2.join()
    print(count)

5、 通过线程互斥锁,实现每次a.txt中的数字减一,防止写乱

def modify(n):
    time.sleep(random.randint(1, 3))
    with open('mos', 'r', encoding='utf-8') as f:
        dic = json.load(f)
        print(f'{n}==数字为', dic['count'])
    if dic['count'] > 0:
        dic['count'] -= 1
        with open('mos', 'w',encoding='utf-8') as f:
            json.dump(dic, f)
            print(f'{n}==减值成功')
    else:
        print(f'{n}减值失败')


def task(i):
    with mutex:
        modify(i)


if __name__ == '__main__':
    mutex = Lock()
    l1 = []
    for i in range(10):
        t = Thread(target=task, args=(i,))
        t.start()
        l1.append(t)
    for i in l1:
        i.join()

6、 利用多进程或多线程自己实现TCP服务端的并发

#服务端
from multiprocessing import Process

import socket

def task(conn):
    while True:
        try:
            data = conn.recv(1024)
            if len(data) == 0: break
            print(data)
            conn.send(data.upper())
        except Exception as e:
            print(e)
            break
    conn.close()


if __name__ == '__main__':
    server = socket.socket()

    server.bind(('127.0.0.1', 8081))
    server.listen(5)
    while True:
        conn, addr = server.accept()
        t=Process(target=task,args=(conn,))
        t.start()



# 客户端
import socket

import time
cli=socket.socket()
cli.connect(('127.0.0.1',8081))

while True:
    cli.send(b'hello world')
    time.sleep(0.1)
    data=cli.recv(1024)
    print(data)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 智慧社区背景与挑战 随着城市化的快速发展,社区面临健康、安全、邻里关系和服务质量等多方面的挑战。华为技术有限公司提出智慧社区解决方案,旨在通过先进的数字化技术应对这些问题,提升城市社区的生活质量。 2. 技术推动智慧社区发展 技术进步,特别是数字化、无线化、移动化和物联化,为城市社区的智慧化提供了可能。这些技术的应用不仅提高了社区的运行效率,也增强了居民的便利性和安全性。 3. 智慧社区的核心价值 智慧社区承载了智慧城市的核心价值,通过全面信息化处理,实现对城市各个方面的数字网络化管理、服务与决策功能,从而提升社会服务效率,整合社会服务资源。 4. 多层次、全方位的智慧社区服务 智慧社区通过构建和谐、温情、平安和健康四大社区模块,满足社区居民的多层次需求。这些服务模块包括社区医疗、安全监控、情感沟通和健康监测等。 5. 智慧社区技术框架 智慧社区技术框架强调统一平台的建设,设立数据中心,构建基础网络,并通过分层建设,实现平台能力及应用的可持续成长和扩展。 6. 感知统一平台与服务方案 感知统一平台是智慧社区的关键组成部分,通过统一的RFID身份识别和信息管理,实现社区服务的智能化和便捷化。同时,提供社区内外监控、紧急救助服务和便民服务等。 7. 健康社区的构建 健康社区模块专注于为居民提供健康管理服务,通过整合医疗资源和居民接入,实现远程医疗、慢性病管理和紧急救助等功能,推动医疗模式从治疗向预防转变。 8. 平安社区的安全保障 平安社区通过闭路电视监控、防盗报警和紧急求助等技术,保障社区居民的人身和财产安全,实现社区环境的实时监控和智能分析。 9. 温情社区的情感沟通 温情社区着重于建立社区居民间的情感联系,通过组织社区活动、一键呼叫服务和互帮互助平台,增强邻里间的交流和互助。 10. 和谐社区的资源整合 和谐社区作为社会资源的整合协调者,通过统一接入和身份识别,实现社区信息和服务的便捷获取,提升居民生活质量,促进社区和谐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值