繁体   English   中英

在 Python 中实现线程

[英]Implementing threads in Python

我是初学者TT

我想通过编写一个由线程执行的 function 来实现一个算术计算器。

但是,错误不断弹出

拜托,我想知道为什么会弹出错误

==================================================== ==

import threading

def execute(number) :
    
  a = int(input('first nuber ==> '))
  b = int(input('second number ==> '))
  c = input('+, -, *, /')

  if c == '+':
    print(a + b)
  elif c == '-':
    print(a - b)
  elif c == '*':
    print(a * b)
  elif c == '/':
    print(a / b)
  else:
    print('FALSE')

    print(threading.currentThread().getName() , number)

if __name__ == "__main__" :
    for i in range(1, 10 ) :
        my_thread = threading.Thread( target=  execute , args = (i, ))
        my_thread.start()

在进一步了解线程之前,您应该了解竞争条件互斥 您的程序有一个竞争条件,所有 10 个线程都在竞争一个资源(用户input /对 I/O 的访问)。 哪个线程将赢得比赛是随机的,因此您的计算器很难使用。 我在这里介绍了互斥,每个线程将在将控制权交给另一个线程之前在独占区域内执行所有 I/O。

import threading

mutex = threading.Lock()

def execute(number) :
  
  mutex.acquire()
  print(threading.currentThread().getName() , number)
  a = int(input('first nuber ==> '))
  b = int(input('second number ==> '))
  c = input('+, -, *, /')
  mutex.release()

  if c == '+':
    print(a + b)
  elif c == '-':
    print(a - b)
  elif c == '*':
    print(a * b)
  elif c == '/':
    print(a / b)
  else:
    print('FALSE')
    

if __name__ == "__main__" :
    for i in range(1, 10 ) :
        my_thread = threading.Thread( target=  execute , args = (i, ))
        my_thread.start()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM