【发布时间】:2017-12-26 12:22:19
【问题描述】:
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()
我正在使用此代码在 python3 中测试线程
如果我输入 1000000099999963 然后输入 55
因为第一次输入既冗长又耗时
所以它将在新线程中计算,直到那时会提示要求新输入,然后我们可以添加新输入,如果更容易计算,那么它很容易计算和打印。
然后当计算大数的线程完成时,它将打印其输出。
所以现在我希望如果代码要求输入一个数字,即 prompt 是 True 那么我想再次打印“数字:”。
我希望输出为
number: 1000000099999963
number: 55
55 is not prime number
number:
1000000099999963 is a prime number
number:
但输出是
number: 1000000099999963
number: 55
55 is not prime number
number:
1000000099999963 is a prime number
当 debug_line 设置为 1 时,不知道为什么行
if(prompt):print("number: ",end="")
不工作
如果我将 debug_line 设置为 2 ,那么该行将起作用
if(prompt):print("number: ")
【问题讨论】:
标签: python-3.x debugging python-multithreading