【发布时间】:2021-12-31 11:49:19
【问题描述】:
我正在使用多线程,总共有 5 个线程,在执行t.join() 时,只有一个线程结束,其余线程继续运行。有谁知道为什么?
我的脚本:
if __name__ == "__main__":
args.debug = True
for x in args.list:
args.threads.append(threading.Thread(target=RD.stream, args=(x,)))
args.threads.append(threading.Thread(target=RD.subs_stream))
args.threads.append(threading.Thread(target=TW.stream))
args.threads.append(threading.Thread(target=pooling_stream))
start_threads()
while True:
time.sleep(1)
if not args.update:
print("Update")
else:
for i in range(len(args.threads)):
try:
if args.threads[i].is_alive():
print(f"before Stopped Thread {str(args.threads[i])}")
args.threads[i].join()
print(f"after Stopped Thread {str(args.threads[i])}")
else:
print(i)
except Exception as e:
print(e)
输出是:
Started Thread <Thread(Thread-1, initial)>
Started Thread <Thread(Thread-2, initial)>
Started Thread <Thread(Thread-3, initial)>
Started Thread <Thread(Thread-4, initial)>
Started Thread <Thread(Thread-5, initial)>
Update
Update
Update
Update
before Stopped Thread <Thread(Thread-1, started 19972)>
【问题讨论】:
-
这取决于线程中调用的函数。他们会回来吗?如果没有,您将永远等待。
-
他们不会回来,这是一条永远运行的流。关于易于实施的任何建议? @tdelaney
-
您是否正在寻找终止线程的方法?这些流可能有一些方法调用来终止/关闭它们。线程将等待接收或其他什么,但如果您调用这些终止方法,线程函数可能会收到错误,您可以使用它从线程中返回。如果您不关心干净的关闭,您可以将线程标记为
daemon在启动它们之前。然后直接退出程序而不进行连接。 -
你能试着在我发布的脚本上写一个例子吗?也许我可以使用
daemon@tdelaney -
我无法编写关闭流的示例,因为我不知道那个 API 是什么。我可以写出硬退出案例。
标签: python python-3.x multithreading