Python从另一个函数内部退出一个线程函数



我想从另一个函数内部退出一个线程函数。这里有一个例子:

from threading import *
from time import *
import keyboard

def ExampleFunction():
while True:
print('The Example function is running.')  # do something in a loop
sleep(1)
def ExitFunction():
print('ExitFunction was called.')
keyboard.wait('f8')  # wait until f8 was pressed
# do whatever it takes to exit the ExampleFunction
if __name__ == '__main__':
Thread(target=ExampleFunction).start()
Thread(target=ExitFunction).start()

您可以使用global变量running = True,在ExampleFunction中使用while running:,在其他函数中使用running = False

from threading import *
from time import *
import keyboard
# global variable
running = True
def ExampleFunction():
print("ExampleFunction: start")

while running:
#print('The Example function is running.')  # do something in a loop
sleep(1)

print("ExampleFunction: exit")
def ExitFunction():
global running  # inform function to use global variable instead of local variable
print('ExitFunction: start')

keyboard.wait('f8')  # wait until f8 was pressed
running = False

print('ExitFunction: sleep')
sleep(5)  # simulate other code

print('ExitFunction: end')

if __name__ == '__main__':
t1 = Thread(target=ExampleFunction)
t1.start()

t2 = Thread(target=ExitFunction)
t2.start()

t1.join()  # wait for end of `ExampleFunction`
t2.join()  # wait for end of `ExitFunction`

使用threading.Event的方式相同,但不需要使用global running,因为它不会在ExitFunction中使用=

from threading import *
from time import *
import keyboard
# global variable
running = Event()
running.set()  # set `True`
def ExampleFunction():
print("ExampleFunction: start")

while running.is_set():
#print('The Example function is running.')  # do something in a loop
sleep(1)

print("ExampleFunction: exit")
def ExitFunction():
print('ExitFunction: start')

keyboard.wait('f8')  # wait until f8 was pressed
running.clear()  # set `False`

print('ExitFunction: sleep')
sleep(5)  # simulate other code

print('ExitFunction: end')

if __name__ == '__main__':
t1 = Thread(target=ExampleFunction)
t1.start()

t2 = Thread(target=ExitFunction)
t2.start()

t1.join()  # wait for end of `ExampleFunction`
t2.join()  # wait for end of `ExitFunction`

您甚至可以在Thread中发送Event作为参数

from threading import *
from time import *
import keyboard
# global variable
running = Event()
running.set()  # set `True`
def ExampleFunction(running):
print("ExampleFunction: start")

while running.is_set():
#print('The Example function is running.')  # do something in a loop
sleep(1)

print("ExampleFunction: exit")
def ExitFunction(running):
print('ExitFunction: start')

keyboard.wait('f8')  # wait until f8 was pressed
running.clear()  # set `False`

print('ExitFunction: sleep')
sleep(5)  # simulate other code

print('ExitFunction: end')

if __name__ == '__main__':
t1 = Thread(target=ExampleFunction, args=(running,))  # `args` needs `,` inside `()` to create `tuple`
t1.start()

t2 = Thread(target=ExitFunction, args=(running,))  # `args` needs `,` inside `()` to create `tuple`
t2.start()

t1.join()  # wait for end of `ExampleFunction`
t2.join()  # wait for end of `ExitFunction`

BTW:

如果您要使用multiprocessing,那么您可以杀死((其他进程。

最新更新