几周前,我开始用Python编程,为了学习的目的,我试图使用信号量来同步两个简单的线程。以下是我所得到的:
import threading
sem = threading.Semaphore()
def fun1():
while True:
sem.acquire()
print(1)
sem.release()
def fun2():
while True:
sem.acquire()
print(2)
sem.release()
t = threading.Thread(target = fun1)
t.start()
t2 = threading.Thread(target = fun2)
t2.start()
但它只印了1个。我怎么能把这些印出来?
它运行良好,只是它的打印速度太快,你看不见。试着在两个函数中都放一个
time.sleep()
(少量)来让线程睡眠那么长时间,以便能够同时看到1和2。示例-
我用这段代码演示了一个线程如何使用一个信号量,而另一个线程将等待(非阻塞)直到Sempahore可用。
这是用Python3.6编写的;没有在任何其他版本上进行测试。
只有同步是从同一个线程完成的,来自不同进程的IPC才会使用此机制失败。
当我运行这个-我得到以下输出。
您还可以按如下方式使用Lock/mutex方法:
另一种/更简单的用法类型:
[注意:
另外,the difference between mutex, semaphore, and lock
相关问题 更多 >
编程相关推荐