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