在python中使用多线程以模式打印变量
目标是打印: 斐波那契编号: Fibo的平方: 主要编号: 素数的平方: 在使用多线程的前10个变量的模式中。在python中使用多线程以模式打印变量,python,python-3.x,multithreading,python-multithreading,Python,Python 3.x,Multithreading,Python Multithreading,目标是打印: 斐波那契编号: Fibo的平方: 主要编号: 素数的平方: 在使用多线程的前10个变量的模式中。 这是我的密码: import threading import time def FibonacciNumbers(n): f1 = 0 f2 = 1 if (n < 1): return for x in range(0, n): print("Fibonacci No.: ")
这是我的密码:
import threading
import time
def FibonacciNumbers(n):
f1 = 0
f2 = 1
if (n < 1):
return
for x in range(0, n):
print("Fibonacci No.: ")
print(f2)
time.sleep(1)
next = f1 + f2
f1 = f2
f2 = next
def FibonacciSq(n):
f1 = 0
f2 = 1
if (n < 1):
return
for x in range(0, n):
print("Square of Fibo: ")
print(f2*f2)
time.sleep(1)
next = f1 + f2
f1 = f2
f2 = next
def prime(x):
i=1
counter = 0
while True:
c=0;
for j in range (1, (i+1), 1):
a = i%j
if (a==0):
c = c+1
if (c==2):
print("Prime No: ")
print (i)
time.sleep(1)
counter = counter + 1
if counter >= x:
break
i=i+1
def primeSq(x):
i=1
counter = 0
while True:
c=0;
for j in range (1, (i+1), 1):
a = i%j
if (a==0):
c = c+1
if (c==2):
print("Square of the Prime Number: ")
print (i*i)
time.sleep(1)
counter = counter + 1
if counter >= x:
break
i=i+1
if __name__ == "__main__":
t1 = threading.Thread(target=FibonacciNumbers, args=(10,))
t2 = threading.Thread(target=FibonacciSq, args=(10,))
t3 = threading.Thread(target=prime, args=(10,))
t4 = threading.Thread(target=primeSq, args=(10,))
t1.start()
time.sleep(1)
# t1.join()
t2.start()
time.sleep(1)
# t2.join()
t3.start()
time.sleep(1)
# t3.join()
t4.start()
time.sleep(1)
# t4.join()
t1.join()
t2.join()
t3.join()
t4.join()
print("Done!")
当多个线程同时访问单个资源(在本例中为标准输出)时,您需要以某种方式同步访问(意思是:让除一个线程之外的所有线程等待,直到资源可以再次自由使用) 根据具体的用例,有几种解决方案。最通用的解决方案是使用一个。这需要两个变化:
lock = threading.Lock()
print
语句包装在锁定块中,例如:
with lock:
print("Fibonacci No.: ")
print(f2)
在大多数情况下,最简单、实用、高效的解决方案是避免在线程之间共享资源。在您的情况下,这意味着不写入任何输出(写入输出的函数通常是可疑的):让每个函数生成结果并在列表中收集它们,或者
将它们作为生成器生成。然后,您可以并行生成结果,然后按顺序打印它们(但这样做需要进行更改,因为线程化
不容易支持返回值的函数;但是,模块concurrent.futures
可以).如果不希望代码同时运行,为什么要使用线程?@KonradRudolph我想获得输出。如果你说的是睡眠。我用它来获取输出,这不是我要说的。去除螺纹材料。直接调用函数。您将得到相同的输出,只是顺序正确。@KonradRudolph我的任务是使用线程使其工作。如果你能指导我在哪里修改,那将是很大的帮助。我不能脱线这很好!但是使用lock并不能提供所需的输出。但我明白你的意思。
with lock:
print("Fibonacci No.: ")
print(f2)