完成后,重新启动/跑步/唤醒python线程
从下面的代码中可以看到,我有一个无限的周期“ while(true)”,我想在完成后重新运行python线程,但无需拥有无限的周期。假设“实时”/嵌入,并且不允许无限周期。似乎Sched Library可以提供帮助,但是这与计时事件有关,我想在与警报或时间无关的其他事件后根据需要进行此操作。
感谢您的回答。
from threading import *
from time import sleep
import signal
fd = open("OutputFile.txt","w")
fd_lock = Lock()
event = Event()
def print_letters(file):
letters = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O']
while(True):
event.wait()
# while(True):
#fd_lock.acquire
with fd_lock:
for letter in letters:
file.write(letter + ", ")
file.write("\n")
file.flush()
#fd_lock.acquire
event.clear()
return 0
def print_numbers( file):
numbers = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15']
while(True):
event.wait()
# while(True):
#fd_lock.acquire
with fd_lock:
for number in numbers:
file.write(number + ', ')
file.write("\n")
file.flush()
#fd_lock.acquire
event.clear()
return 0
def handler(signum, frame):
print('Signal handler call signal num',signum)
if(signum == signal.SIGALRM):
signal.alarm(1)
event.set()
return 0
if __name__ == "__main__":
t_pl = Thread(target=print_letters, args=(fd, ))
t_pn = Thread(target=print_numbers, args=(fd, ))
t_pl.start()
t_pn.start()
#signal.signal(signal.SIGALARM, handler(signum, frame))
signal.signal(signal.SIGALRM, handler)
signal.alarm(1)
while True:
#kbd = input("Stop wirting to the file [y/n]")
#disregard this section of the code
kbd='n'
if kbd != 'n' and kbd != 'N':
signal.raise_signal(signal.SIGKILL)
else:
sleep(5)
t_pl.join()
t_pn.join()
signal.alarm(0)
As you can see from the code below I have a infinite cycle "while(True)" and I want to re-run a python thread after it has finished but without the need to having a infinite cycle. Assume "real-time"/embedded and it does not allow infinite cycles. It seems like sched library can help but that is attached to timings events and I want to do it on demand after some other event not related to an alarm or timing.
Thanks for your answers.
from threading import *
from time import sleep
import signal
fd = open("OutputFile.txt","w")
fd_lock = Lock()
event = Event()
def print_letters(file):
letters = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O']
while(True):
event.wait()
# while(True):
#fd_lock.acquire
with fd_lock:
for letter in letters:
file.write(letter + ", ")
file.write("\n")
file.flush()
#fd_lock.acquire
event.clear()
return 0
def print_numbers( file):
numbers = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15']
while(True):
event.wait()
# while(True):
#fd_lock.acquire
with fd_lock:
for number in numbers:
file.write(number + ', ')
file.write("\n")
file.flush()
#fd_lock.acquire
event.clear()
return 0
def handler(signum, frame):
print('Signal handler call signal num',signum)
if(signum == signal.SIGALRM):
signal.alarm(1)
event.set()
return 0
if __name__ == "__main__":
t_pl = Thread(target=print_letters, args=(fd, ))
t_pn = Thread(target=print_numbers, args=(fd, ))
t_pl.start()
t_pn.start()
#signal.signal(signal.SIGALARM, handler(signum, frame))
signal.signal(signal.SIGALRM, handler)
signal.alarm(1)
while True:
#kbd = input("Stop wirting to the file [y/n]")
#disregard this section of the code
kbd='n'
if kbd != 'n' and kbd != 'N':
signal.raise_signal(signal.SIGKILL)
else:
sleep(5)
t_pl.join()
t_pn.join()
signal.alarm(0)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论