<p>您编写的伪代码与python中线程/多处理的工作方式非常相似。例如,您希望启动一个“永远运行”的线程,而不是直接修改内部速率值,您可能只需要通过一个给出新值的队列发送一条消息。你知道吗</p>
<p>查看<a href="https://stackoverflow.com/q/1190206/377366">this question</a>。你知道吗</p>
<p>下面是一个演示如何做你所要求的事情。我更喜欢使用队列来直接调用线程/进程。你知道吗</p>
<pre><code>import Queue # !!warning. if you use multiprocessing, use multiprocessing.Queue
import threading
import time
def main():
q = Queue.Queue()
tester = Tester(q)
tester.start()
while True:
user_input = raw_input("New period in seconds or (q)uit: ")
if user_input.lower() == 'q':
break
try:
new_speed = float(user_input)
except ValueError:
new_speed = None # ignore junk
if new_speed is not None:
q.put(new_speed)
q.put(Tester.STOP_TOKEN)
class Tester(threading.Thread):
STOP_TOKEN = '<<stop>>'
def __init__(self, q):
threading.Thread.__init__(self)
self.q = q
self.speed = 1
def run(self):
while True:
# get from the queue
try:
item = self.q.get(block=False) # don't hang
except Queue.Empty:
item = None # do nothing
if item:
# stop when requested
if item == self.STOP_TOKEN:
break # stop this thread loop
# otherwise check for a new speed
try:
self.speed = float(item)
except ValueError:
pass # whatever you like with unknown input
# do your thing
self.main_code()
def main_code(self):
time.sleep(self.speed) # or whatever you want to do
if __name__ == '__main__':
main()
</code></pre>