python多线程 不在main_Python多线程并发的误区

由于项目要做一个并发测试,由于断言的东西较多,决定手写脚本。于是用python写了脚本:

def test_method(thread_no):

print("%s===test_method running %s" % (ctime(), thread_no))

r = requests.post(url=url, json=params, headers=headers)

print(r.cookies)

print(r.text)

status = r.json()["status"]

assert status == 200

if __name__ == '__main__':

# test_method(1)

print("""并发测试xxxxxxx""")

threads = []

for i in range(vuser_count):

name = threading.Thread(target=test_method, args=("线程" + str(i + 1),))

threads.append(name)

for t in threads:

t.setDaemon(True)

t.start()

for t in threads:

t.join()

print("执行完毕")

其实这段代码咋一看没什么问题,但是需要思考一下python的多线程!!!

但python由于历史遗留的问题,严格说多个线程并不会同时执行(没法有效利用多核处理器,python的并发只是一个核心的交替执行不同的代码)。

解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。

这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。所以python的多线程并发并不能充分利用多核,并发没有java的并发严格

Java可以有效利用多核心!!!可以改用java来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值