zoukankan      html  css  js  c++  java
  • Python 线程间通信练习

    from threading import Lock,RLock
    import threading
    
    import time
    
    total = 0
    lock = RLock()
    
    
    def add():
        global total
        global lock
        for i in range(1000000):
            lock.acquire()
            lock.acquire()
            total+=1
            lock.release()
            lock.release()
    
    def desc():
        global total
        global lock
        for i in range(1000000):
            lock.acquire()
            total -= 1
            lock.release()
    
    start = time.time()
    add_threading = threading.Thread(target=add)
    desc_threading = threading.Thread(target=desc)
    add_threading.start()
    
    desc_threading.start()
    end = time.time()
    add_threading.join()
    
    desc_threading.join()
    print(total)
    print(end-start)
    
    # Semaphore 是用于控制进入数量的锁
    import threading
    
    import time
    
    
    class HtmlSpider(threading.Thread):
        def __init__(self, url, sem):
            super().__init__()
            self.url = url
            self.sem = sem
    
        def run(self):
            time.sleep(2)
            print('got html text success')
            self.sem.release()
    
    
    class UrlProducer(threading.Thread):
        def __init__(self, sem):
            super().__init__()
            self.sem = sem
    
        def run(self):
            for i in range(20):
                self.sem.acquire()
                html_thread = HtmlSpider('https://baidu.com/{}'.format(i), sem)
                html_thread.start()
    
    
    if __name__ == '__main__':
        # 一次允许3个并发
        sem = threading.Semaphore(3)
        url_producer = UrlProducer(sem)
        url_producer.start()
    
    
  • 相关阅读:
    笔试面试题集锦
    Mosquitto pub/sub服务实现代码浅析-主体框架
    查找算法(一)
    基数排序
    插入排序-----希尔排序
    插入排序------直接插入排序
    归并排序
    选择排序--------简单选择排序
    交换排序------冒泡排序
    排序算法
  • 原文地址:https://www.cnblogs.com/jeff-ideas/p/10540368.html
Copyright © 2011-2022 走看看