私は楽しいためにPythonを学んでいます。私がここで達成しようとしているのは、While True
ループを通して入力を求めているプログラムで、他のスクリプトをバックグラウンドで実行中です。(ユーザが選択)。Python:ユーザの入力を受けながらスレッドを実行する
私は現在、うまくいきます...しかし、私が欲しかったのと全く同じです。ユーザーの入力を受け取り、askのようなスレッドを開始しますが、ユーザーの次の入力を待っている間にスレッドを一時停止します。次に、私のスレッドが毎秒印刷するものを出力しますが、コンソールの次の印刷後には1回だけ印刷します。
IDLEを使用してコードを定期的にテストしていますが、おそらくそれが役立つかもしれません。
校長スクリプト:
from mythreadclass import MyThread
while True:
user_input = input("What do I do ? ")
if user_input == "start thread":
#Will start a threat that prints foo every second.
mythread = MyThread()
mythread.start()
elif user_input == "hello":
print("Hello !")
else:
print("This is not a correct command.")
Threadクラス:
import time
from threading import Thread, Timer
class MyThread(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
print("Thread started !")
while True:
self.foo()
time.sleep(1)
def foo(self):
print("foo !")
を実行するときに私が持っているもの:
What do I do ?
>>> start thread
Thread started !
What do I do ?
>>> hello
foo !Hello !
>>> hello
foo !Hello !
ご覧のとおり、スレッドは、毎秒foo!
を出力し、次の入力を依頼します。代わりに、スレッドを開始し、ユーザーが何かを入力したときにのみfoo !
を出力します。入力はスレッドを一時停止/ブロックします。私が達成したいことは明らかである場合、私は知らない
のでは、ここではそれがです:あなたは、スレッドが間違ってやっている
What do I do ?
>>> start thread
Thread started !
What do I do ?
foo !
foo !
foo !
#User waited 3 seconds before typing hello so there should be 3 foos
>>> hello
Hello !
What do I do ?
foo !
foo !
etc etc.
私はraw_input' 'にそれ' input'を変更し、すべてでは期待通りに動作するようです。そして私はすべてを1つのファイルに入れます。 – sal
ここに書かれている方法は、python 3.5で私にとって完璧に動作します。これはまさにあなたが書いたものなのでしょうか? –
@JustinBellそれは_(非常に)_単純な例ですが、私のプロジェクト全体が全体的に同じです(他のファイルにスレッドをキャストするプリンシパルクラス) – sohomangue