文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python并发编程:探索多线程和多进程的奥秘

2024-02-05 18:16

关注

1.1 多线程的基础知识

1.2 多线程的创建与管理

def task(name): print(f"Task {name} is running.")

thread1 = threading.Thread(target=task, args=("Thread 1",)) # 线程1 thread2 = threading.Thread(target=task, args=("Thread 2",)) # 线程2

thread1.start() thread2.start()

- 线程同步:使用锁(Lock)或信号量(Semaphore)等同步原语可以实现线程的协作与通信,避免数据竞争。
```python
import threading

# 定义共享变量
shared_value = 0

# Lock对象用于保护共享变量,确保原子操作
lock = threading.Lock()

def increment_shared_value():
    # 使用lock对象加锁以确保原子操作
    lock.acquire()
    global shared_value
    shared_value += 1
    # 释放锁
    lock.release()

# 创建多个线程并赋予任务
threads = []
for i in range(10):
    thread = threading.Thread(target=increment_shared_value)
    threads.append(thread)

# 启动线程
for thread in threads:
    thread.start()

# 等待所有线程结束
for thread in threads:
    thread.join()

# 输出最终的共享变量值
print(f"Shared value: {shared_value}")  # 预期输出:10

二、多进程:释放并行计算潜能

多进程是另一种并发编程技术,它允许您在不同的进程中创建和执行多个任务。进程是独立运行的程序实体,拥有自己的地址空间、堆栈和代码段。多进程的优势在于它可以充分利用多核处理器的计算能力,实现真正的并行计算。

2.1 多进程的基础知识

2.2 多进程的创建与管理

def task(name): print(f"Task {name} is running.")

process1 = multiprocessing.Process(target=task, args=("Process 1",)) # 进程1 process2 = multiprocessing.Process(target=task, args=("Process 2",)) # 进程2

process1.start() process2.start()

process1.join() process2.join()

- 进程通信:Python的多进程模块提供了`Queue`、`Pipe`等通信机制,允许进程间的数据交换和同步。
```python
import multiprocessing

# 定义消息队列
queue = multiprocessing.Queue()

def producer():
    # 向消息队列发送数据
    for i in range(10):
        queue.put(i)

def consumer():
    # 从消息队列接收数据
    while not queue.empty():
        item = queue.get()
        print(f"Received item: {item}")

# 创建进程并赋予任务
producer_process = multiprocessing.Process(target=producer)
consumer_process = multiprocessing.Process(target=consumer)

# 启动进程
producer_process.start()
consumer_process.start()

# 等待所有进程结束
producer_process.join()
consumer_process.join()

def task(name): print(f"Task {name} is running.")

pool = multiprocessing.Pool(4) # 4个进程

for i in range(10): pool.apply_async(task, args=(f"Task {i}",))

pool.close() pool.join()

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯