[问题] 我想停止调用函数的线程。
[CODE]
import wx
app = wx.App(redirect=False)
top = wx.Frame(None)
sizer = wx.GridBagSizer()
import threading
shutdown_event = threading.Event()
def testFunction(event):
while not shutdown_event.is_set():
import time
for i in range(2):
print ('win','r')
time.sleep (0.5)
print ('abc')
time.sleep (0.5)
print ('enter')
time.sleep (0.5)
print 'sleep'
time.sleep (3)
def startThread(event):
import threading
th = threading.Thread(target=testFunction, args=(event,))
th.start()
def stopThread(event):
shutdown_event.set()
addButton = wx.Button( top, -1, "Start", style=wx.BU_EXACTFIT )
sizer.Add(addButton, (6, 8), (2, 14), wx.EXPAND)
stopButton = wx.Button( top, -1, "Stop", style=wx.BU_EXACTFIT )
sizer.Add(stopButton, (8, 9), (2, 14), wx.EXPAND)
top.Bind(wx.EVT_BUTTON, startThread, addButton)
top.Bind(wx.EVT_BUTTON, stopThread, stopButton)
top.Sizer = sizer
top.Sizer.Fit(top)
top.Show()
app.MainLoop()
[CURRENT] 如果我点击“停止”按钮,没有任何反应。
[DESIRED] 如果单击“停止”按钮,函数“testFunction”应该停止。
答案 0 :(得分:1)
是的它正在停止,问题是它没有被中断,它在脚本的两次迭代完成之前一直在运行,然后检查while condition
,然后停止。
import wx
app = wx.App(redirect=False)
top = wx.Frame(None)
sizer = wx.GridBagSizer()
import threading
shutdown_event = threading.Event()
def testFunction(event):
while not shutdown_event.is_set():
import time
for i in range(2):
print u"Iteración {}".format(i)
if shutdown_event.is_set():
break;
print ('win','r')
time.sleep (0.1)
if shutdown_event.is_set():
break;
print ('abc')
time.sleep (0.1)
if shutdown_event.is_set():
break;
print ('enter')
time.sleep (0.1)
if shutdown_event.is_set():
break;
print 'sleep'
time.sleep (0.5)
print u"Fin de ejecución\n\n"
print u"Se detuvo la ejecución.\n\n"
def startThread(event):
import threading
th = threading.Thread(target=testFunction, args=(event,))
th.start()
def stopThread(event):
shutdown_event.set()
addButton = wx.Button( top, -1, "Start", style=wx.BU_EXACTFIT )
sizer.Add(addButton, (6, 8), (2, 14), wx.EXPAND)
stopButton = wx.Button( top, -1, "Stop", style=wx.BU_EXACTFIT )
sizer.Add(stopButton, (8, 9), (2, 14), wx.EXPAND)
top.Bind(wx.EVT_BUTTON, startThread, addButton)
top.Bind(wx.EVT_BUTTON, stopThread, stopButton)
top.Sizer = sizer
top.Sizer.Fit(top)
top.Show()
app.MainLoop()
答案 1 :(得分:1)
如果你想在你的线程中拥有更精细的粒度,你必须实现它。使用类似的东西,使用<script>
$(document).ready(function() {
<?php echo $hide_div ?>;
// DECODE JSON IN JS
var selected_array = $.parseJSON(<?php echo json_encode ($product_category_selected) ?>);
$.each(selected_array(key, value) {
$("#" + value).prop("checked", true);
});
});
</script>
语句将生成器语句中的不同步骤分开:
yield