Python threading.start 启动时间

1 投票
1 回答
2403 浏览
提问于 2025-04-18 18:08

我正在尝试制作一个小的负载测试脚本,目的是让一堆操作同时运行。但是我发现我启动线程的方式似乎跟线程需要做的工作量有关。

也就是说,如果我增加线程需要完成的工作量,启动所花的时间就会变长。有人能帮我看看下面的代码,告诉我我哪里做错了吗?

这是我启动线程的方式:

for i in range(0, 10):
    print i, time.strftime("%H:%M:%S", time.localtime())
    t = Thread(target=make_request())
    t.start()

这是 make_request() 的代码:

def make_request():
    #global request_count
    for i in range(0, 1000):
        data = {'poll':'testpoll','option':random.choice(vote_options)}
        resp = requests.post("http://localhost:6223/create",data=data)
        if resp.status_code == 200:
            request_count += 1

基本上,我发现如果我在 make_request() 中增加范围,每个线程的启动速度就会变慢。

1 个回答

4

你遇到的问题主要是因为,当你在 Thread() 类里设置 target 参数时,其实是在调用你的函数 make_request()。这意味着,在你调用 Thread.start() 之前,你的函数就已经开始执行了。因为在你把回调函数注册给 Thread() 的时候,实际上已经执行了这个函数(所以启动的时间会变长);实际上,你把 target 设置为 None 是因为你的函数返回了 None。所以,Thread() 并没有真正在线程中运行任何东西!

你可以把代码改成这样:

for i in range(0, 10):
    print i, time.strftime("%H:%M:%S", time.localtime())
    t = Thread(target=make_request)
    t.start()

这里有一个不错的教程,可能对你有帮助:

http://pymotw.com/2/threading/

撰写回答