Python线程:一个线程递增计数,另一个递减

时间:2015-03-13 03:12:52

标签: python multithreading

我在python中有一个简单的线程示例,其中一个线程每秒递增一次计数,另一个每5秒递减一次。这是代码

# threading example
import threading
import time

lock = threading.Lock()
count = 0

def a():
  global count
  while(1):
    lock.acquire()
    try:
      count += 1
      print('a: ', count )
    finally:
      time.sleep(1)
      lock.release()


def b():
  global count
  while(1):
    lock.acquire()
    try:
      count -= 1
      print('b: ', count )
    finally:
      time.sleep(5)
      lock.release()

t = threading.Thread(name='a', target=a)
w = threading.Thread(name='b', target=b)

t.start()
w.start()

然而,似乎只有线程t打印出来的东西,而线程w却没有。这是输出:

a:  1
a:  2
a:  3
a:  4
a:  5
a:  6
a:  7
a:  8
a:  9

出了什么问题?

1 个答案:

答案 0 :(得分:3)

你需要在睡觉前释放锁,否则你永远不会释放锁。

变化:

finally:
  time.sleep(1)
  lock.release()

要:

finally:
  lock.release()
  time.sleep(1)

对另一个帖子做同样的事情。您只需要在递增/递减期间锁定,它是唯一具有线程安全问题的操作。