Python多线程登陆这样写的思路对不对,菜鸟一个希望大佬给出建议
本帖最后由 a情授001 于 2020-11-10 22:24 编辑希望大佬指出毛病,或者大佬们有更好的思路。参考了pyec的多线程更改的import sys,traceback,threading,time
def get(u,p):
print('账号:'+u,'密码:'+p)
time.sleep(2)
def 多线程(线程数, 最长等待时间=0, 跟随主线程结束=False):
n = 0
u = ['a123-a456','b123-b456','c123-c456','d123-d456']
任务数 = len(u)
__多线程列表 = []
剩余数 = 任务数
try:
while 剩余数 > 0:
名字 = u.split('-')
密码 = u.split('-')
xkz = threading.Lock()
for x in __多线程列表:
if x.is_alive() == False:
__多线程列表.remove(x)
if len(__多线程列表) >= 线程数:
time.sleep(0.1)
else:
xkz.acquire()
线程 = threading.Thread(target=get, args=(名字, 密码), daemon=跟随主线程结束)
线程.start()
__多线程列表.append(线程)
剩余数 -= 1
n += 1
xkz.release()
for i in __多线程列表:
if 最长等待时间 <= 0:
i.join()
else:
i.join(最长等待时间)
return True
except:
print("{}|运行出错\r\n{}\r\n".format(sys._getframe().f_code.co_name, traceback.format_exc()))
return False
def main():
s = time.time()
多线程(4)
e = time.time()
print(e-s)
main()
错11111111111 python的多线程就是鸡肋,只能用到单核,不能算真正的多线程.
用多进程或者异步应该更好一点. 好家伙,写作文{:1_893:} 本帖最后由 pzx521521 于 2020-11-11 09:16 编辑
最好不要用中文 = =
如果是学threading.Lock()的demo, 代码没什么大问题, 少一个多个线程一起修改的东西
上面代码threading.Lock()是没必要的
因为没有同时修改的东西,
如果上锁了, 就和单线程的效率差不多了
当然因为你的是sleep, 所以还是会快很多的
同意3l 多线程最好不要用python, win和unix下实现不一样, 主要是GIL的限制
不过平常自己用用, 不跑满cpu 也很快了
推过生产环境还是 推荐go 其次java 锁好像放错了位置 python版易语言
页:
[1]