多线程数量限制

本文展示了Python中使用线程和进程池进行并发处理的实例。首先,通过`threading.BoundedSemaphore`限制同时运行的线程数量,防止资源过度消耗。接着,利用`multiprocessing.Manager.Queue`和`Pool`实现进程间的通信,演示了如何在多个进程中读写共享数据。
摘要由CSDN通过智能技术生成
# coding: utf-8
import threading
import time


def fun(semaphore, num):
    print("Thread %d is running." % num)
    time.sleep(3)
    # 释放信号量,信号量加一
    semaphore.release()
    # 再次释放信号量,信号量加一,这是超过限定的信号量数目,这时会报错ValueError: Semaphore released too many times
    semaphore.release()


if __name__=='__main__':
    # 初始化信号量,数量为2,最多有2个线程获得信号量,信号量不能通过释放而大于2
    semaphore = threading.BoundedSemaphore(2)

    # 运行4个线程
    for num in range(4):
       # 获得信号量,信号量减一
   		semaphore.acquire()
        t = threading.Thread(target=fun, args=(semaphore, num))
        t.start()

转载:https://blog.csdn.net/a349458532/article/details/51589460

2. 进程池创建的进程之间的通信

from multiprocessing import Manager,Pool
import time

def writer(q):

    for i in "we":
        print("开始写入",i)
        q.put(i)

def reader(q):
    time.sleep(3)
    for i in range(q.qsize()):
        print("得到消息",q.get())
if __name__ == "__main__":
    print("主进程启动")
    q = Manager().Queue()
    po = Pool(3)
    for i in range(5):
        po.apply_async(writer,(q,))
        po.apply_async(reader,(q,))
    po.close()
    po.join()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值