import threading
class PrimeNumber(threading.Thread):
def __init__(self, number):
threading.Thread.__init__(self)
self.Number = int(number)
def run(self):
counter = 2
while counter*counter <= self.Number:
if self.Number % counter == 0:
promptLock.acquire()
if(prompt):print()
print("%d is not prime number" % (self.Number))
if(prompt):print("number: ",end="")
promptLock.release()
return
counter += 1
promptLock.acquire()
if(prompt): print()
print ("%d is a prime number" % self.Number)
#strange line
debug_line = 1
if(debug_line==1):
if(prompt):print("number: ",end="")
if(debug_line==2):
if(prompt):print("number: ")
promptLock.release()
threads = []
prompt=False
promptLock = threading.Lock()
def promptlocker():
global prompt
promptLock.acquire()
prompt = not prompt
promptLock.release()
while True:
promptlocker()
print("number: ",end="")
input1 = int(input())
promptlocker()
if input1 < 1:
break
thread = PrimeNumber(input1)
threads += [thread]
thread.start()
for x in threads:
x.join()
を働いていない私は、入力1000000099999963を与え、その後55
場合は、最初の入力が長いと時間 を消費しているように、それはで計算されます新しいスレッドを作成し、新しい入力を求めるプロンプトが表示され、新しい入力を追加することができます。計算が簡単な場合は、簡単に計算して印刷できます。 そして、大きな数を計算するスレッドが終了すると、その出力が出力されます。
コードがのプロンプトを表示している場合は、はとなります。を入力してもう一度「番号:」を印刷します。
私は出力が
印刷機能は、私がのpython3 <br/> にスレッドをテストするには、このコードを使用していますのpython3で
number: 1000000099999963
number: 55
55 is not prime number
number:
1000000099999963 is a prime number
number:
になりたいけどdebug_lineが1に設定されているときに出力が
number: 1000000099999963
number: 55
55 is not prime number
number:
1000000099999963 is a prime number
で、ライン
if(prompt):print("number: ",end="")
が
に動作していない理由を知りませんdebug_lineを2に設定すると、動作します
if(prompt):print("number: ")