Python threading.start 启动时间
我正在尝试制作一个小的负载测试脚本,目的是让一堆操作同时运行。但是我发现我启动线程的方式似乎跟线程需要做的工作量有关。
也就是说,如果我增加线程需要完成的工作量,启动所花的时间就会变长。有人能帮我看看下面的代码,告诉我我哪里做错了吗?
这是我启动线程的方式:
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()
这里有一个不错的教程,可能对你有帮助: