2017-07-16 3 views
0

私は5分ごとにマテリアルを取得するirlミニゲームに取り組んでいます。 これを監視するには、単純なpythonスクリプトを書こうと思っていました。 しかし、少しのロードブロッキングがあります。他のコマンドを実行しているときのPythonバックグラウンドループ

ループを中断することなく他のキーボード入力を実行している間に、何分何かを行うループを作成するにはどうすればよいですか?

+3

、このプログラムを停止するCtrlキーCを打つ – Fabien

+1

まず、これはどのように学ぶ読みます以下のリンクから質問をするhttps://stackoverflow.com/help/asking – Kallz

+1

私たちはここでチュートリアルを提供するつもりはないが、ルールを曲げさせる。コードを* threads *に編成する方法については、おそらく読む必要があります。これらのスレッドの1つが5分ごとに目を覚まして何かをするでしょう。もう一方のスレッドは、キーボードとマウスのイベントを処理するために連続して実行されているように見えます。 –

答えて

0

あなたの仕事にはタイマーが役に立つかもしれません。このリンクを確認することをお勧めします:https://docs.python.org/2.4/lib/timer-objects.html。タイマーがカウントしている間に他のタスクを実行することができます。時間が経過すると、タイマーに機能を付加して何かを行うことができます。このライブラリのタイマーはから継承されています。スレッド

+1

古典的なPython 2.4のドキュメントにリンクする特別な理由はありますか?最新のバージョンは[こちら](https://docs.python.org/3/library/threading.html#timer-objects)です。 –

+0

私の間違いだったのですが、Python 2.xであることを認識していませんでした。次回はどのバージョンにリンクしているのですか?しかし、アイデアは同じです、私はそれが問題の良い解決策だと信じています – JBeloqui

0

threading.Timerを使用すると、かなり簡単な例があります。ユーザー入力に応答している間に5秒ごとに現在の時刻を表示します。

このコードは、ANSI/VT100ターミナルコントロールエスケープシーケンスをサポートするすべてのターミナルで実行されます。あなたはKeyboardInterruptを送信する必要が

#!/usr/bin/env python3 

''' Scrolling Timer 

    Use a threading Timer loop to display the current time 
    while processing user input 

    See https://stackoverflow.com/q/45130837/4014959 

    Written by PM 2Ring 2017.07.18 
''' 

import readline 
from time import ctime 
from threading import Timer 

# Some ANSI/VT100 Terminal Control Escape Sequences 
CSI = '\x1b[' 
CLEAR = CSI + '2J' 
CLEAR_LINE = CSI + '2K' 
SAVE_CURSOR = CSI + 's' 
UNSAVE_CURSOR = CSI + 'u' 
GOTO_LINE = CSI + '%d;0H' 

def emit(*args): 
    print(*args, sep='', end='', flush=True) 

# Show the current time in the top line using a Timer thread loop 
def show_time(interval): 
    global timer 
    emit(SAVE_CURSOR, GOTO_LINE % 1, CLEAR_LINE, ctime(), UNSAVE_CURSOR) 
    timer = Timer(interval, show_time, (interval,)) 
    timer.start() 

# Set up scrolling, leaving the top line fixed 
emit(CLEAR, CSI + '2;r', GOTO_LINE % 2) 

# Start the timer loop 
show_time(interval=5) 

try: 
    while True: 
     # Get user input and print it in upper case 
     print(input('> ').upper()) 
except KeyboardInterrupt: 
    timer.cancel() 
    # Cancel scrolling 
    emit('\n', SAVE_CURSOR, CSI + '0;0r', UNSAVE_CURSOR) 

は、つまり、あなたのソースコード(あるいは少なくとも関連部分)を提供

関連する問題