Python 为什么赢了';这个线程不能重新启动吗?

Python 为什么赢了';这个线程不能重新启动吗?,python,python-multithreading,Python,Python Multithreading,我有一个程序,我已经写了,我试图停止,然后重新启动线程功能。我知道一个线程的实例只能使用一次,但由于线程是从函数调用的,并且它不是一个全局变量,所以就我的理解而言,它本质上是一个声明的新变量 在下面的示例代码中,我首先通过函数调用启动myThread。然后我暂停片刻(循环),让myThread在停止之前运行。接下来,我再次调用该函数以重新启动myThread(因为它是一个新实例,所以不是真正的重新启动),但它从未重新启动,正如您从输出中看到的那样。它也不会抛出可怕的“RuntimeError:线

我有一个程序,我已经写了,我试图停止,然后重新启动线程功能。我知道一个线程的实例只能使用一次,但由于线程是从函数调用的,并且它不是一个全局变量,所以就我的理解而言,它本质上是一个声明的新变量

在下面的示例代码中,我首先通过函数调用启动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
仍然为真,因此新线程在打印任何内容之前立即退出。废话!非常感谢。我有“象棋大脑”在这里进行。。。英雄联盟