请问多线程代码完成后,为何没有自动注销

2018-06-07 17:01:35 +08:00
 zxteam
我写了个每 50 秒自动登陆查询多个 ID 相关信息的代码,用到了多线程,每次执行前,都清空了一次多线程列表,thread_list = [],为何子线程执行后,print 出来的线程 ID 名一直是累加的,就是
thread - 1,
thread - 2,
………………
thread - 1000
一直是这样加下去,而不是每 50 秒恢复一次。这是不是代表服务器同时打开了这么多线程呢?请问如何真正清空线程,让服务器只执行真正用到的 10 个线程。

代码写得较粗糙,恳请各位帮优雅优化一下,感谢


import threading
import time
import requests
from threading import current_thread

def autocheck():
while True:
bktels = []
thread_list = []
bktels = ['ID1','ID2','ID3','ID4','ID5','ID6','ID7','ID8','ID9','ID10']
for n in bktels:
th = threading.Thread(target=getPID, args=(n,))
thread_list.append(th)
for t in thread_list:
t.start()
for t in thread_list:
t.join()
time.sleep(50)


def getPID(n):
threada = threading.current_thread()
str2 = ','.join('%s' %id for id in n)
print (threada.getName() +' ID:'+str2)
url = 'http://127.0.0.1/login.php?id=' + str2
html=requests.get(url)
print html.text

autocheck()
1918 次点击
所在节点    Python
2 条回复
fmumu
2018-06-08 07:08:05 +08:00
python 不清楚,java 中线程 id 是一直自增的,线程执行完就死了啊,你这个需求是不是考虑线程池?
ilucio
2018-06-08 10:14:30 +08:00
以前也遇到过一样的问题,当出现 thread - 1000 的时候表示真的有 1000 个线程在运行,可以用 threading.activeCount()函数检测下。最后改用线程池解决了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/461256

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX