Python 分离线程正在摧毁整个程序

2024-03-28 13:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我写了这个剧本:

def schedule_setup():
# KILL OLD THREADS SHOULD THEY EXIST
global active
active = False
time.sleep(3)
active = True
global threadlist
threadlist = []

try:
    sql = "SELECT TIME_TO_RUN FROM time_table"
    cursor.execute(sql)
    results = cursor.fetchall()
    for row in results:
        #row[0].strftime('%H:%M')
        t = threading.Thread(target=th,args=(row[0].strftime('%H:%M'),))
        t.start()
        threadlist.append(t)
    # JOIN all threads to main memory
    #for count in threadlist:
        #count.join()
    sql = "UPDATE motor SET UPDATE_SCHEDULE = 0"
    try:
        cursor.execute(sql)
        # commit the changes in database
        db.commit()
    except:
        # Rollback in case there is any error
        print "no worky"
        db.rollback()
except:
    print "Error: UNABLE TO GET TABLE DATA"

在sql上设置并创建一个计划的事件来执行操作需要时间。我把所有活动线程的“killer”放在开头,这样,如果我因为时间被更新而再次调用这个线程,它就可以杀死旧线程并用新线程替换它们。这一切都是我想要的,但一旦行动被称为整个程序崩溃。。。下面是它调用的代码:

def th(run_time):
    global active
    schedule.every().day.at(run_time).do(run_motor)

    while active == True:
        schedule.run_pending()
        time.sleep(1)

看看线程是如何每秒检查一次的?所以当我尝试创建新的线程时,线程被终止,但是当“run\u motor”被调用时,本应无限期循环的主程序会崩溃,有时其他线程仍在运行,所以这对我来说非常奇怪。你知道吗


Tags: runintruesqltimedefsleep线程
1条回答
网友
1楼 · 发布于 2024-03-28 13:20:11

你不能杀死一个线程。不要终止一个线程,而是对线程进行编码,让它做你想做的事情,而且只做你想让它做的事情。这样,你就不用杀了它。你知道吗

如果你和另外两个人共用一辆车,而这辆车不在车道上,你就不能直接杀死开车的人。这样你就可以腾出车来用了,但它不会在车道上,因为你在他们还没来得及把车放回去之前就杀了司机。相反,打电话给他们,告诉他们把车开回来,让他们把车放回去。你知道吗

相关问题 更多 >