jeff-ideas
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()

分类:

技术点:

相关文章:

  • 2021-12-12
  • 2021-12-20
  • 2021-07-08
  • 2021-10-06
  • 2021-12-07
  • 2021-10-16
  • 2021-12-12
猜你喜欢
  • 2021-10-16
  • 2021-10-16
  • 2021-10-16
  • 2021-10-16
  • 2021-07-12
  • 2021-10-16
  • 2021-10-16
相关资源
相似解决方案