我有一些字符串格式的 python 代码(Blockly 的输出),用于实例化自定义类。然后它们在线程中并发执行。这是代码的一个简单示例:
import threading
from time import sleep
class myFunction(object):
def __init__(self, code):
self._code = code
self._stoprequest = False
def start(self):
while not self._stoprequest:
exec code
sleep(1)
def stop(self):
self._stoprequest = True
''' other functions '''
threads = []
f1 = myFunction("print 'hello'")
f2 = myFunction("var=0\nwhile True:\n print var\n var=var+1")
f3 = myFunction("sleep(3600)")
functions=[(f1,'f1'),(f2,'f2'),(f3,'f3')]
for function in functions:
t = threading.Thread(target = function[0].start(), name=function[1])
threads.append(t)
t.start()
sleep(5)
functions[0][0].stop()
functions[1][0].stop()
functions[2][0].stop()
对于函数“f1”,我的实现有效,因为执行的代码不是无限循环。
但是对于函数 'f2' 和 'f3' 不起作用('f3' 将在睡眠后结束)
在寻找答案时,我发现了这个问题,它可能适用于“睡眠”,但不适用于无限循环。
有没有办法结束任何类型的代码的执行?我不介意它是杀死线程还是捕获异常。