素材牛VIP会员
python 如何控制多线程数量?
 yy***15  分类:Python  人气:756  回帖:2  发布于6年前 收藏
import requests, time
from threading import Thread


class MyThread(Thread):
    def __init__(self, url):
        Thread.__init__(self)
        self.url = url

    def run(self):
        open_url(self.url)


def open_url(url):
    r = requests.get(url[:-1])
    print(r.status_code)
    print(url)
    # return url


if __name__ == '__main__':
    with open("E:/all_domain.txt",'r') as f:
        t_start = time.time()
        threads = []
        for url in f:
            t = MyThread(url)
            threads.append(t)
            t.start()
            print(len(threads))
        for i in threads:
            i.join()
        t_end = time.time()
        print('the thread way take %s s' % (t_end - t_start))

上面是我写的一个多进程。f文件里面大概有18万条数据,执行多线程的时候难道打开18万个线程吗?要怎么改写控制线程数量?譬如说先100个线程,100个线程结束后在开100个线程。
线程是在一个cpu核心里面运行,有办法做到多核心多线程吗?要如何改写呢?
谢谢!

 标签:python

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv7 码师
风***巴 交互设计师 6年前#1

在开头加
threadmax = threading.BoundedSemaphore(100)

在open_url方法最后一行加入
threadmax.release()

在for url in f:和第一行t = MyThread(url)之间加入
threadmax.acquire()

Lv6 码匠
迁***3 Web前端工程师 6年前#2

我觉得这里应该使用并发而不是多线程(GIL 本身的缺陷)。参考下asyncioaiohttp

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取