零基础学 Python(2023 版)
尹会生
太乙人工智能技术合伙人 & 项目总监
60050 人已学习
新⼈⾸单¥68
课程目录
已完结/共 124 讲
结束语 & 结课测试 (2讲)
零基础学 Python(2023 版)
登录|注册
留言
11
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 85|多进程间如何通信?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程介绍:这次我们都做了哪些升级?
内容综述:明确学习目的
01|如何配置 Python 开发环境?
02 | 常用 IDE:如何提高开发效率?
03 | 如何站在官方文档的肩膀上自己“造轮子”?
04 | 怎样运行你的第一行代码?
05 | 怎样使用 Gitee 管理你的代码?
06 | 学习编程有问题?去这里找答案!
07|跨越门槛:Python 开发环境总结及实现原理
08 | 修炼基本功:浅析输入输出
09 | 变量:如何让计算机临时存储数据?
10|字符串(上):Python 是如何处理单词的?
11|字符串(下):Python 是如何处理单词的?
12|存储数字应该采用哪种数据类型?
13|何时使用数,何时使用字符串?
14|注释:如何写程序的说明书?
15|小试牛刀:如何制作简单计算器?
16|变量命名规范:如何编写优雅的程序?
17|告别新手村:Python 编程基础知识
18|内置数据类型包括哪几种?
19|列表如何处理同类数据?
20|常见常新:列表的常见操作
21|元组:如何处理一次性数据?
22|常见常新:集合的常见操作
23|字典:如何处理映射类型的数据?
24|常见常新:字典的常见操作(上)
25|常见常新:字典的常见操作(下)
26|小试牛刀:如何利用类型转换实现手机通讯录?(上)
27|小试牛刀:如何利用类型转换实现手机通讯录?(下)
28|常见的内置数据类型都何时使用?
29|避坑指南:内置数据类型的常见错误
30|内置数据类型参考:如何使用官方文档与帮助?
31|再回首:“内置数据类型”单元小结
32|if 语句:数据流程出现分支时,怎样编写程序?
33|match 语句:如何通过 match 关键字来处理程序的分支逻辑?
34|while 循环:需要多次重复执行某段程序时,怎么做?
35|for 循环:如何遍历一个对象里的所有元素?
36|语句嵌套:如何处理多重循环的问题?
37|小试牛刀:如何设计一个飞机大战的程序?
38|避坑指南:判断和循环中的常见错误
39|再回首:“判断循环”单元小结
40|输入:如何接收用户通过键盘输入的数据?
41|格式化输出:如何将执行结果通过屏幕输出?
42|F-strings:如何通过定义好的格式进行输出?
43 | 常见常新:文件的打开
44|文件编码:如何解决不同操作系统的文件乱码问题?
45|常见常新:文件的读写
46|常见常新:文件的关闭
47|小试牛刀:如何使用 Python 合并多个文件?
48|再回首:“输入输出与文件操作”单元小结
49|函数的定义:如何优雅地反复引用同一段代码?
50|函数的参数:怎样实现函数与外部数据通信?
51|函数的参数:当函数操作对象不固定时怎么处理?
52|函数的返回值:如何得到函数的执行结果?
53|小试牛刀:如何利用函数实现电商购物车功能?
54|避坑指南:列表作为参数传递出错了怎么办?
55|高阶函数:函数对象与函数调用的用法区别
56|装饰器:函数嵌套的定义与调用的区别
57|再回首:“函数”单元小结
58|编程思想不同会导致怎样的代码差异?
59|类与实例:如何使用面向对象的思想编写程序?
60|类的继承:如何解决代码重用的问题?
61|类的装饰器:如何改变类方法的功能?
62|小试牛刀:如何开发自动咖啡机?
63|避坑指南:类的常见错误
64|init 方法:如何为对象传递参数?
65|再回首:“类”单元小结
66 | 模块的导入:如何使用其他人编写好的代码功能?
67 | 标准库:Python 默认提供的便捷功能有哪些?
68 | 自定义模块:如何编写一个完整功能?
69 | 第三方模块的使用:如何使用其他人编写的代码?
70 | 小试牛刀:如何使用 Python 为函数求导?
71|再回首:“模块与标准库”单元小结
72|初识异常:异常的产生与分类
73|异常捕获:出现异常时,如何利用程序进行处理?
74|自定义异常捕获:如何定义业务异常?
75|避坑指南:编写捕获异常程序时经常出现的问题
76|再回首:“异常处理”单元小结
77|扩展数据类型:怎样使用更复杂的数据类型?
78|魔术方法:怎样通过类构造自己需要的数据类型?
79|怎样将 Python 和 C++ 结合起来混合编程?
80|怎样将已有算法改造成符合项目的特定算法?
81|设计模式:怎样合理组合多个函数和类?
82|Redis 数据库:怎样使用 NoSQL 数据库?
83|关系型数据库:怎样使用关系型数据库?
84|计算资源充足时,如何通过并行设计提高效率?
85|多进程间如何通信?
86|再回首:“高级数据类型与算法”单元小结
87|理论盘点:数据分析的流程及对应的 Python 库
88|理论盘点:数据采集的方法与 HTTP 协议
89|理论盘点:任务的并行执行原理
90|理论盘点:非规范化数据处理的基础与正则表达式
91|如何获取网页上的数据并存储到文件?
92|小试牛刀:如何将数据进行图形化展示?
93|再回首:“数据分析”单元小结
94|理论盘点:文件类型与对应的 Python 函数库
95|如何批量读取 Excel 文件?
96|如何实现数据的批量格式转换?
97|如何扩展数据类型?
98|再回首:“办公自动化”单元小结
99|理论盘点:Web 客户端与服务端
100|理论盘点:MVC 模型是什么?
101|如何使用Django搭建简单的Web服务器?
102|如何使用Django-admin实现文章上传?
103|如何使用Django实现文章发布?
104|再回首:“Web开发”单元小结
105|理论盘点:人脸识别的一般步骤
106|理论盘点:人脸识别常用的 Python 库有哪些?
107|怎样通过 OpenCV 采集视频信号?
108|如何训练人脸模型?
109|怎样设计人脸识别系统?
110|再回首:“计算机视觉”单元小结
111|聚焦异同:物联网与互联网有啥不一样?
112|理论盘点:基础但不简单的 TCP 协议
113|理论盘点:物模型与模组
114|如何为 ESP32 安装 MicroPython?
115|怎样通过 MQTT 协议构建消息队列?
116|小试牛刀:在 OLED 屏幕和手机远程同时显示室内温度
117|再回首:“物联网”单元小结
118|结束语:人生苦短,我用Pyhon
结课测试|来赴一场满分之约吧!
直播加餐|与AI共同编程,用ChatGPT学Python
直播加餐|用OpenAI API理解Python数据类型
直播加餐|掌握Gradio框架:为 AI Agent 程序定制界面
本节摘要

课后习题
请编写一个多进程任务,一个进程用于产生 1~10000 的数字,另一个进程用于判断该数字是否能被 7 整除,如果可以被整除则输出到终端。

课程代码、课件及其他相关资料地址
https://gitee.com/wilsonyin/zero-basics-python

登录 后留言

全部留言(11)

  • 最新
  • 精选
Geek_Mike
#请编写一个多进程任务,一个进程用于产生 1~10000 的数字,另一个进程用于判断该数字是否能被 7 整除,如果可以被整除则输出到终端。 from multiprocessing import Process, Queue def number(q): num = [i for i in range(1, 10001)] q.put(num) q.close() def is_divided_by_7(q): num = q.get() lst = [i for i in num if i % 7 == 0] print(lst) q.close() if __name__ == '__main__': queue = Queue() process1 = Process(target=number, args=(queue,)) process2 = Process(target=is_divided_by_7, args=(queue,)) process1.start() process2.start() process1.join() process2.join() print('above numbers can be divided by 7')

作者回复: 很好, 有两个小细节,你可以优化一下 1 在number函数中,您可以直接在循环内部将数字放入队列,而不是一次性将整个列表放入队列,这样,is_divided_by_7函数可以同时取出并处理数字。 def number(q): for i in range(1, 10001): q.put(i) q.put(None) # 发送一个信号表示数字发送完毕 2 不需要在进程函数内部调用q.close()。

2023-08-31
LiLian
老师 请问多进程的场景有哪些? 总资源数不变的情况下 拆分成多个分布式服务实例 来增加并行 是不是也可以提升cpu密集型任务的执行效率。也不用支持多进程通信

作者回复: 以我们熟悉的电商场景为例吧,电商场景中涉及许多可以并行处理的任务,因此可以通过多进程或分布式服务实例来提高执行效率。下面,我们将详细探讨这两个方面。 ### 1. 电商场景中的多进程应用 多进程可以并行执行多个任务,从而在某些场景下提高效率。在电商场景中,可能的多进程应用场景包括: - **订单处理**:每个进程可以负责处理一个或一组订单,包括库存检查、支付处理、发货通知等。 - **数据分析和报告**:对大量的交易、用户行为等数据进行分析和报告生成。 - **搜索和推荐引擎**:可以使用多进程来并行处理用户的搜索请求和推荐计算。 - **图像处理**:例如,处理产品图片,进行裁剪、缩放、优化等。 ### 2. 分布式服务实例来增加并行 通过拆分成多个分布式服务实例,你可以在不增加总资源数的情况下,更灵活地分配资源,从而提高CPU密集型任务的执行效率。这种方式的优点包括: - **负载均衡**:通过将请求分发到多个服务实例,可以均衡负载,从而提高响应速度。 - **可扩展性**:可以根据需要灵活增加或减少服务实例的数量。 - **容错性**:如果一个服务实例出现故障,其他实例可以继续处理请求,提高了系统的可用性。 ### 3. 多进程通信 虽然分布式服务实例可以减少需要多进程通信的情况,但在某些场景下,进程间的通信可能仍然是必要的。例如,如果不同的进程或服务实例需要共享某些状态信息或协调工作,可能需要某种形式的通信机制。 ### 总结 电商场景中的多进程和分布式服务实例都可以提高系统的并行处理能力。选择哪种方式取决于具体的需求和资源限制。多进程适合于可以完全并行处理的任务,而分布式服务实例则提供了更灵活的负载均衡和扩展性。在设计系统时,应该仔细考虑各种选项,并选择最符合需求的解决方案。

2023-07-19
2
你好极客时间
from multiprocessing import Process,Queue import random class MyProcess(Process): def __init__(self,queue): super().__init__() self.queue = queue def run(self):# 启动任务 self.create() self.get_result() def create(self): num = random.randint(1,10000) self.queue.put(num) def get_result(self): random_num = self.queue.get() if random_num % 7 ==0: print("The number is",random_num,", is divisible by 7.") else: print("Generated number", random_num, "is not divisible by 7.") if __name__ == '__main__': queue = Queue() process = MyProcess(queue) process.start() # 启动进程 process.join() # 结束进程
2024-02-23
你好极客时间
from multiprocessing import Process,Queue import random class MyProcess(Process): def __init__(self,queue): super().__init__() self.queue = queue def run(self):# 启动任务 self.create() self.get_result() def create(self): num = random.randint(1,10000) self.queue.put(num) def get_result(self): random_num = self.queue.get() if random_num % 7 ==0: print("The number is",random_num,", is divisible by 7.") else: print("Generated number", random_num, "is not divisible by 7.") if __name__ == '__main__': queue = Queue() process = MyProcess(queue) process.start() # 启动进程
2024-02-23
Geek_631607
from multiprocessing import Queue from random import random def random_int(): return int(random() * 10000) num = random_int() q = Queue(1) q.put(num) if q.get() % 7 == 0: print(f"{num} 可以被 7 整除") else: print(f"{num} 不可以被 7 整除")
2023-12-11
醉后不知天在水
import multiprocessing import time import sys def generate_numbers(output_queue): for i in range(1, 10001): output_queue.put(i) output_queue.put(None) # 发送结束标志 def check_divisible(input_queue): while True: number = input_queue.get() if number is None: break if number % 7 == 0: print(number) if __name__ == '__main__': output_queue = multiprocessing.Queue() numbers_process = multiprocessing.Process(target=generate_numbers, args=(output_queue,)) divisible_process = multiprocessing.Process(target=check_divisible, args=(output_queue,)) numbers_process.start() divisible_process.start() numbers_process.join() divisible_process.join() numbers_process.terminate() divisible_process.terminate() sys.exit(0)
2023-11-15
MarkG
老师,我使用Pipe来实现 from multiprocessing import Pipe a, b = Pipe() for i in range(1, 10000): a.send(i) __val = b.recv() if __val % 7 == 0: print(f"该数字 {__val} 可以被7整除")
2023-10-24
Geek_Mike
#请编写一个多进程任务,一个进程用于产生 1~10000 的数字,另一个进程用于判断该数字是否能被 7 整除,如果可以被整除则输出到终端。 import concurrent.futures def number(): num_list = [i for i in range(1, 10001)] return num_list def is_divided_by_7(num): if num % 7 == 0: return True if __name__ == '__main__': with concurrent.futures.ProcessPoolExecutor() as executor: lst = [num for num, value in zip(number(), executor.map(is_divided_by_7, number())) if value] print(lst) print('above numbers can be divided by 7')
2023-08-31
Seven
注意,声明进程 p=Process(target=pro_num, args=(q,)) 的时候, args()中只有一个参数的时候, 参数末尾要加一个逗号:args(q,)不然会报错 TypeError: 'Queue' object is not iterable
2023-02-13
Cy23
from multiprocessing import Queue,Process from random import randint def pro_num(q): number = randint(1, 10000) q.put(number) def con_num(q): val = q.get() if(val% 7 == 0): print(val) if __name__ == '__main__': q = Queue() for i in range(100): p1 = Process(target=pro_num, args=(q,)) p2 = Process(target=con_num, args=(q,)) p1.start() p1.join() p2.start()
2023-01-29
收起评论