python爬虫多线程如何同时运行

388次阅读
没有评论

python爬虫多线程如何同时运行

我们想要进行检票的时候,想要加快速度拓展多个检票口是不错的选择。但是多个窗口就需要配备多个检票员。而我们的多线程也是这样的道理,虽然有多个程序可以处理,但是我们需要分配出出理这些程序的人手,而Semaphore就可以很好地做到让这些线程同时运转进行,接下来我们看看如何做吧。

互斥锁同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去。

import threading
import time
 
def run(n, semaphore):
    semaphore.acquire()   #加锁
    time.sleep(1)
    print("run the thread:%s\n" % n)
    semaphore.release()     #释放
 
if __name__ == '__main__':
    num = 0
    semaphore = threading.BoundedSemaphore(5)  # 最多允许5个线程同时运行
    for i in range(22):
        t = threading.Thread(target=run, args=("t-%s" % i, semaphore))
        t.start()
    while threading.active_count() != 1:
        pass  # print threading.active_count()
    else:
        print('-----all threads done-----')

拓展互斥锁:

由于线程之间是进行随机调度,如果有多个线程同时操作一个对象,如果没有很好地保护该对象,会造成程序结果的不可预期,我们也称此为“线程不安全”。

通过Semaphore和互斥锁定义的比较,我们很容易看出,互斥锁是一对一,而Semaphore是可以实现一对一的,大家可以根据使用情况进行选择。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:wuyou2021-05-24发表,共计881字。
新手QQ群:570568346,欢迎进群讨论 Python51学习