为了账号安全,请及时绑定邮箱和手机立即绑定

如何在一段时间后停止运行我的线程?

如何在一段时间后停止运行我的线程?

青春有我 2021-08-24 17:03:47
我需要在一段时间后停止运行我的线程,在这个例子中我只放了 120 秒。我尝试使用这种方法是行不通的。from threading import Threadfrom Queue import Queueimport osimport timetimeout = 120   # [seconds]timeout_start = time.time()#while True :def OpenWSN ():    os.system("./toto")def Wireshark():    os.system(" tshark -i tun0 -T ek -w /home/ptl/PCAP_Brouillon/Sim_Run3rd.pcap > /dev/null ")def wrapper1(func, queue):    queue.put(func())def wrapper2(func, queue):    queue.put(func())q = Queue()Thread(target=wrapper1, args=(OpenWSN, q)).start()Thread(target=wrapper2, args=(Wireshark,  q)).start()#print (time.time())print ("***************** End Simulation *************************")os.system("quit")
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我认为这就是您要实现的目标:


import threading

from queue import Queue

import os

import time


timeout = 120   # [seconds]


timeout_start = time.time()


def OpenWSN ():

    print( "OpenWSN:")

    os.system("echo -OpenWSN-")


def Wireshark():

    print( "Wireshark:")

    os.system("echo -Wireshark-")


def wrapper1(func, queue):

    queue.put(func())


def wrapper2(func, queue):

    queue.put(func())


q = Queue()

threading.Thread(target=wrapper1, args=(OpenWSN, q)).start()

threading.Thread(target=wrapper2, args=(Wireshark,  q)).start()


cv = threading.Condition()

cv.acquire()

cv.wait( timeout )


print ("***************** End Simulation *************************")

print (" Simulation Time: {0}s".format( time.time() - timeout_start) )


os.system("echo -exit-")

这会产生以下输出:


C:\temp\StackExchange\StopRunningThread>python -B stop-running-thread.py

OpenWSN:

Wireshark:

-OpenWSN-

-Wireshark-

***************** End Simulation ************************* 

Simulation Time: 120.04460144042969s

-exit-

那里发生了什么 - 您正在启动两个线程,每个线程在系统中启动单独的进程。在上述线程启动后,您返回主线程,分配一个“锁”并等待此锁发出信号或超时。在这种特殊情况下,没有人发出锁定信号,因此完成应用程序的唯一机会是等待超时发生。我会扩展您的应用程序,它会在每个线程函数中发出锁定信号,因此只有当两个线程函数都终止时,我们才能终止主线程。但这不是你问题的一部分,所以我假设你可以不发信号就离开。


查看完整回答
反对 回复 2021-08-24
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信