在Python 2.7中创建一个可中断的睡眠线程

时间:2017-05-06 19:03:10

标签: python multithreading timer

我刚刚开始阅读如何在Python中使用线程,所以我对如何解决问题知之甚少。这是:

我的数据库中有一张表,其中每行都有一个状态'。状态可能会不断变化,当它获得特定值时,我希望启动15分钟的计时器。在那个计时器结束时,我想在日志文件中写一些内容但是如果'状态'松散了那个特定值,我希望能够停止计时器。

# If component is not in room
if data[0][0] != data[1][0]:

    # If it is in the corridor
    if data[0][0] == data[1][1]:
        #end timer    <----
        #change position
        cursor.execute( """UPDATE Reservation
                SET localisation = '{}'
                WHERE reservationID = {}""".format( data[1][0], reservID ) )

    # If it is not in the corridor either
    else:
        print( "Le matériel a été lu sur un lecteur ne reconnaissant pas sa localisation" )
        print( "Vous n'avez pas passé le matériel sur le lecteur de '{}' au couloir".format( data[0][0] ) )
        #envoieMail
        exit( 6 )

# If it is in the room
else:
    #Change position
    cursor.execute( """UPDATE Reservation
            SET localisation = '{}'
            WHERE reservationID = {}""".format( data[1][1], reservID ) )
    #start timer     <----

我可以开始一个线程。问题是我希望能够找到它并在“#”位置时停止它。更改。 也许这不是做我想做的最好的方式,如果是这样的话,我会很高兴有一些建议!

谢谢。

编辑:我一直在考虑获取线程的处理程序,将其放在db表中(以及状态,在另一列中)并从那里取回它以阻止它。但我在网上看到我们无法杀死线程?但我可以杀死一个进程,所以也许多处理?

1 个答案:

答案 0 :(得分:0)

对于响应数据库中字段值更改而执行的代码,您可以考虑使用数据库的过程和触发器编码方法设计触发器。但是,此类触发器通常仅限于对数据库本身执行操作,并且在数据库系统之外无法做很多事情。在您的情况下,您可以拥有一个表,其中包含有关挂起日志写入的信息。此表可以包含输入请求时的时间戳和状态字段的副本等字段。

让代码执行只是等待几分钟才能执行某些操作通常不是推荐的方法。您可以考虑使用cron调度程序运行一些代码,每隔1分钟检查一次(这是cron使用的最频繁的间隔)。例如,在您的情况下,您可能会运行一些代码来检查保存挂起的日志写入信息(时间戳字段和状态字段的副本)的表与当前时间(以查看是否已经过去15分钟)以及要确定的状态字段值是否写日志文件。一旦变得无关紧要,此代码也可能会从表中删除该请求。