Python 为什么赢了';这个线程不能重新启动吗?
我有一个程序,我已经写了,我试图停止,然后重新启动线程功能。我知道一个线程的实例只能使用一次,但由于线程是从函数调用的,并且它不是一个全局变量,所以就我的理解而言,它本质上是一个声明的新变量 在下面的示例代码中,我首先通过函数调用启动myThread。然后我暂停片刻(循环),让myThread在停止之前运行。接下来,我再次调用该函数以重新启动myThread(因为它是一个新实例,所以不是真正的重新启动),但它从未重新启动,正如您从输出中看到的那样。它也不会抛出可怕的“RuntimeError:线程只能启动一次”异常,所以我知道我不会走这条路。我已经简化了这个代码示例的实际操作,它的行为方式与我的实际代码相同Python 为什么赢了';这个线程不能重新启动吗?,python,python-multithreading,Python,Python Multithreading,我有一个程序,我已经写了,我试图停止,然后重新启动线程功能。我知道一个线程的实例只能使用一次,但由于线程是从函数调用的,并且它不是一个全局变量,所以就我的理解而言,它本质上是一个声明的新变量 在下面的示例代码中,我首先通过函数调用启动myThread。然后我暂停片刻(循环),让myThread在停止之前运行。接下来,我再次调用该函数以重新启动myThread(因为它是一个新实例,所以不是真正的重新启动),但它从未重新启动,正如您从输出中看到的那样。它也不会抛出可怕的“RuntimeError:线
#test-thread.py
import os, threading
stopThread = False
option = ''
def threaded_function():
global option, stopThread
n = 0
while not stopThread:
n += 1
if option == "started":
print ("myThread is running ("+str(n)+")\n")
if option == "restarted":
print ("myThread is running again ("+str(n)+")\n")
def thread_control_function():
global stopThread
print ("Entered the thread_control function\n")
if option == "started":
print ("Starting myThread\n")
myThread = threading.Thread(target=threaded_function)
myThread.start()
print("Started myThread\n")
elif option == "restarted":
print("restarting myThread\n")
myThread = threading.Thread(target=threaded_function)
myThread.start()
print("restarted myThread\n")
elif option == "stopped":
print ("Stopping myThread\n")
stopThread = True
print ("myThread is stopped\n")
print ("Exiting the thread_control function\n")
# Clear the python console
os.system("clear")
option = "started"
thread_control_function()
for i in range(1,200000):
pass
option = "stopped"
thread_control_function()
for i in range(1,200000):
pass
option = "restarted"
thread_control_function()
for i in range(1,200000):
pass
option = "stopped"
thread_control_function()
在我正在开发的主程序中,我有一个停止游戏按钮,当我单击停止游戏按钮时,它会将stopThread变量设置为true。
它实际上停止游戏并重置所有游戏变量。我可以点击开始游戏按钮,它的行为就像我期望的那样(它开始一个新游戏)。我试图使用一个重新启动按钮,将stopThread设置为true,不重置所有游戏变量,然后启动(重新启动)游戏线程。我不明白为什么无法启动另一个线程(重新启动)。stopThread标志从未重置。线程控制函数应该如下所示:
def thread_control_function():
global stopThread
print ("Entered the thread_control function\n")
if option == "started":
print ("Starting myThread\n")
myThread = threading.Thread(target=threaded_function)
myThread.start()
print("Started myThread\n")
elif option == "restarted":
print("restarting myThread\n")
stopThread = False
myThread = threading.Thread(target=threaded_function)
myThread.start()
print("restarted myThread\n")
elif option == "stopped":
print ("Stopping myThread\n")
stopThread = True
print ("myThread is stopped\n")
print ("Exiting the thread_control function\n")
在“重新启动”线程时,stopThread
仍然为真,因此新线程在打印任何内容之前立即退出。废话!非常感谢。我有“象棋大脑”在这里进行。。。英雄联盟