在 Python 中使用两个单独的线程打印偶数和奇数
Printing even and odd numbers using two separate threads in Python
我在 Python 中使用 2 个单独的线程编写了下面的代码来打印偶数和奇数,但是这段代码不起作用(程序没有显示任何输出,期望是按顺序打印 0-10 的数字 )。非常感谢任何有助于调试的帮助。下面是代码:
from threading import Thread
from threading import Event
even_available = Event()
odd_available = Event()
def print_even():
global limit
global exit_prog
global number
while not exit_prog and number <= limit:
print(number)
number = number + 1
even_available.clear()
odd_available.set()
def print_odd():
global limit
global exit_prog
global number
odd_available.wait()
while not exit_prog and number <= limit:
print(number)
number = number+1
odd_available.clear()
even_available.set()
if __name__ == "__main__":
limit = 10
exit_prog = False
number = 0
t1 = Thread(target=print_even)
t2 = Thread(target=print_odd)
even_available.set()
t1.start()
t2.start()
t1.join()
t2.join()
使用多处理使代码更简洁。如果不需要,您还想避免使用全局变量。
from multiprocessing import Process
def print_even(limit, exit_prog, number):
while not exit_prog and number <= limit:
if(number % 2 == 0):
print(number)
number = number + 1
def print_odd(limit, exit_prog, number):
while not exit_prog and number <= limit:
if(number % 2 == 1):
print(number)
number = number + 1
if __name__ == "__main__":
limit = 10
exit_prog = False
number = 0
t1 = Process(target=print_even, args=(limit, exit_prog, number))
t1.start()
t2 = Process(target=print_odd, args=(limit, exit_prog, number))
t2.start()
t1.join()
t2.join()
您只是忘记了在 while 循环中 wait()
for even_available
/odd_available
:
from threading import Thread
from threading import Event
even_available = Event()
odd_available = Event()
def print_even():
global limit
global exit_prog
global number
while not exit_prog and number < limit:
even_available.wait()
print('E', number)
number = number + 1
even_available.clear()
odd_available.set()
def print_odd():
global limit
global exit_prog
global number
while not exit_prog and number < limit:
odd_available.wait()
print('O', number)
number = number + 1
odd_available.clear()
even_available.set()
if __name__ == "__main__":
limit = 10
exit_prog = False
number = 0
t1 = Thread(target=print_even)
t2 = Thread(target=print_odd)
even_available.set()
t1.start()
t2.start()
t1.join()
t2.join()
打印:
E 0
O 1
E 2
O 3
E 4
O 5
E 6
O 7
E 8
O 9
E 10
我在 Python 中使用 2 个单独的线程编写了下面的代码来打印偶数和奇数,但是这段代码不起作用(程序没有显示任何输出,期望是按顺序打印 0-10 的数字 )。非常感谢任何有助于调试的帮助。下面是代码:
from threading import Thread
from threading import Event
even_available = Event()
odd_available = Event()
def print_even():
global limit
global exit_prog
global number
while not exit_prog and number <= limit:
print(number)
number = number + 1
even_available.clear()
odd_available.set()
def print_odd():
global limit
global exit_prog
global number
odd_available.wait()
while not exit_prog and number <= limit:
print(number)
number = number+1
odd_available.clear()
even_available.set()
if __name__ == "__main__":
limit = 10
exit_prog = False
number = 0
t1 = Thread(target=print_even)
t2 = Thread(target=print_odd)
even_available.set()
t1.start()
t2.start()
t1.join()
t2.join()
使用多处理使代码更简洁。如果不需要,您还想避免使用全局变量。
from multiprocessing import Process
def print_even(limit, exit_prog, number):
while not exit_prog and number <= limit:
if(number % 2 == 0):
print(number)
number = number + 1
def print_odd(limit, exit_prog, number):
while not exit_prog and number <= limit:
if(number % 2 == 1):
print(number)
number = number + 1
if __name__ == "__main__":
limit = 10
exit_prog = False
number = 0
t1 = Process(target=print_even, args=(limit, exit_prog, number))
t1.start()
t2 = Process(target=print_odd, args=(limit, exit_prog, number))
t2.start()
t1.join()
t2.join()
您只是忘记了在 while 循环中 wait()
for even_available
/odd_available
:
from threading import Thread
from threading import Event
even_available = Event()
odd_available = Event()
def print_even():
global limit
global exit_prog
global number
while not exit_prog and number < limit:
even_available.wait()
print('E', number)
number = number + 1
even_available.clear()
odd_available.set()
def print_odd():
global limit
global exit_prog
global number
while not exit_prog and number < limit:
odd_available.wait()
print('O', number)
number = number + 1
odd_available.clear()
even_available.set()
if __name__ == "__main__":
limit = 10
exit_prog = False
number = 0
t1 = Thread(target=print_even)
t2 = Thread(target=print_odd)
even_available.set()
t1.start()
t2.start()
t1.join()
t2.join()
打印:
E 0
O 1
E 2
O 3
E 4
O 5
E 6
O 7
E 8
O 9
E 10