Python中信号量的清理

3 投票
1 回答
3889 浏览
提问于 2025-04-17 01:32

我在用信号量来把工作交给另一个线程,具体来说,主线程会把一个任务放到队列里,然后调用信号量的 release 方法;工作线程会调用 acquire 方法,然后从队列里取出一个任务来处理。

还有一个特殊的终止项,主线程可以把它放到队列里,告诉工作线程结束。我的问题是,工作线程在结束之前,是否应该尽量调用 acquire 来匹配任何未完成的 release?这个信号量是属于工作线程的,线程结束后就不会再用了;不过这个进程可能会长时间运行,并且将来会创建很多工作对象、线程和信号量。

  1. 如果信号量的计数不是零,直接放弃它是否安全?(我觉得可能是安全的,但想确认一下。)

  2. 不管是否安全,你觉得在结束之前把信号量完全清理干净是不是更“好”?

我主要关心的是Python中的信号量行为(更具体来说是CPython)。不过,如果你有关于其他语言(比如C的pthread)的信号量的一般经验分享,我也很欢迎。

1 个回答

2

#1: 是的,放弃一个计数不为零的信号量是安全的。毕竟它只是一个数值。

#2: 减少代码量会更好。尽量写出最少的、清晰的代码来实现正确的功能。

撰写回答