定期执行函数/SIGSTOP
Periodically execute function / SIGSTOP
我想要 运行 一个项目 (project.py),它有两个调度元素,就像我在堆栈溢出时发现的这个答案:Periodically execute function in thread in real time, every N seconds
一个函数是 运行 每 x
秒,另一个每 y
秒
其中 0.03 < x < 0.1
和 2 < y < 10
.
function_x(t)
调用暂停的外部程序 (sync.py) (SIGSTOP
) project.py
问题0:调用do_every后,程序继续执行。这是一个正确的假设吗?
问题 1:如果 sync.py 在 project.py 上调用 SIGCONT
之前需要 2 秒执行,那么 function_x
的 Timer 会是 'messed up' 吗?
问题 3:如果 function_y
通过套接字发送数据,function_x
调用 SIGSTOP
会不会搞乱这个执行?计时会暂停吗?定时器是怎么计时的?
之前引用的答案:
import threading;
def do_every (interval, worker_func, iterations = 0):
if iterations != 1:
threading.Timer (
interval,
do_every, [interval, worker_func, 0 if iterations == 0 else iterations-1]
).start ();
worker_func ();
def print_hw ():
print "hello world";
def print_so ():
print "Whosebug"
# call print_so every second, 5 times total
do_every (1, print_so, 5);
# call print_hw two times per second, forever
do_every (0.5, print_hw);
0)
调用 do_every 后 - 它运行 worker_func
一次然后继续。是的。所以你的输出将是:
Whosebug
After first do_every
hello world
After second do_every
hello world
Whosebug
....
1)
我真的不知道计时器是否会被搞砸 - 所以我 运行 使用 htop
进行测试,我可以在其中将 SIGCONT 和 SIGSTOP 发送到任何进程 - 所以,我 运行 do_every (2, print_so, 10);
并且在 5-6 "Whosebug"s 之后我停止了它。启动它一分钟后 - 它又喷出 4 个 Whosebug。所以,不 - 计时器没有搞砸。
3)
它不会被搞砸 - 如果套接字超时 - 并且你暂停超过超时时间,套接字的另一端将假定你的代码已死并会给出超时异常。但如果它的时间少于超时,套接字将假定它是一个临时断开连接,并在之后继续流式传输数据。
我想要 运行 一个项目 (project.py),它有两个调度元素,就像我在堆栈溢出时发现的这个答案:Periodically execute function in thread in real time, every N seconds
一个函数是 运行 每 x
秒,另一个每 y
秒
其中 0.03 < x < 0.1
和 2 < y < 10
.
function_x(t)
调用暂停的外部程序 (sync.py) (SIGSTOP
) project.py
问题0:调用do_every后,程序继续执行。这是一个正确的假设吗?
问题 1:如果 sync.py 在 project.py 上调用 SIGCONT
之前需要 2 秒执行,那么 function_x
的 Timer 会是 'messed up' 吗?
问题 3:如果 function_y
通过套接字发送数据,function_x
调用 SIGSTOP
会不会搞乱这个执行?计时会暂停吗?定时器是怎么计时的?
之前引用的答案:
import threading;
def do_every (interval, worker_func, iterations = 0):
if iterations != 1:
threading.Timer (
interval,
do_every, [interval, worker_func, 0 if iterations == 0 else iterations-1]
).start ();
worker_func ();
def print_hw ():
print "hello world";
def print_so ():
print "Whosebug"
# call print_so every second, 5 times total
do_every (1, print_so, 5);
# call print_hw two times per second, forever
do_every (0.5, print_hw);
0)
调用 do_every 后 - 它运行 worker_func
一次然后继续。是的。所以你的输出将是:
Whosebug
After first do_every
hello world
After second do_every
hello world
Whosebug
....
1)
我真的不知道计时器是否会被搞砸 - 所以我 运行 使用 htop
进行测试,我可以在其中将 SIGCONT 和 SIGSTOP 发送到任何进程 - 所以,我 运行 do_every (2, print_so, 10);
并且在 5-6 "Whosebug"s 之后我停止了它。启动它一分钟后 - 它又喷出 4 个 Whosebug。所以,不 - 计时器没有搞砸。
3) 它不会被搞砸 - 如果套接字超时 - 并且你暂停超过超时时间,套接字的另一端将假定你的代码已死并会给出超时异常。但如果它的时间少于超时,套接字将假定它是一个临时断开连接,并在之后继续流式传输数据。