2017-12-26 26 views
0
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() 

I가 python3 스레딩을 테스트하는이 코드를 사용하고 python3 작동하지
내가 입력 주면 1,000,000,099,999,963 후 55
제 입력이 길고 시간 그래서이 계산 될 소모적 새로운 쓰레드 그리고 그때까지 새로운 입력을 요구하는 프롬프트가 생기고 새로운 입력을 추가 할 수 있고 계산이 더 쉽다면 쉽게 계산되고 인쇄 될 수 있습니다. 그리고 많은 수를 계산할 쓰레드가 끝나면 출력을 출력합니다.
코드가 숫자 인 경우 을 묻는 경우입니다.이면 다시 "번호 :"를 인쇄하고 싶습니다. 라인인쇄 기능

if(prompt):print("number: ",end="") 

를 작동하지 않는 이유
내가 출력이

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 

입니다, 잘 모릅니다

만약 debug_line을 2로 설정하면, 그 라인은 작동합니다

if(prompt):print("number: ") 

답변

0

어떤 오류가 발생합니까?

내가 Python2.7 여기 에서 작동하도록 코드를 변경하는 것은 내 코드입니다 :

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: ", 
      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: ", 
    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: ", 
    input1 = int(input()) 
    promptlocker() 
    if input1 < 1: 
     break 
    thread = PrimeNumber(input1) 
    threads += [thread] 
    thread.start() 

for x in threads: 
    x.join() 

내 출력 :

number: 1000000099999963 
number: 55 
55 is not prime number 
number: () 
1000000099999963 is a prime number 
number: 

당신에게 인쇄 문에 문제가 다음에 직면하는 경우 파이썬 버전을 확인하고 싶을 수도 있습니다.

if(prompt):print("number: ",end="") 

위의 라인은 Python2에서 구문 에러를 발생시킵니다. 그것은 단지 Python3 에서 지원되는 것 Python2에서 이에 해당하는 코드는 다음과 같습니다

if(prompt):print "number: ", 

버전은 다음이 오류 Inconsistent use of tabs and spaces in indentation

에게 확인 싶어 수있는 문제가 아닌 경우