Python中信号量的清理
我在用信号量来把工作交给另一个线程,具体来说,主线程会把一个任务放到队列里,然后调用信号量的 release
方法;工作线程会调用 acquire
方法,然后从队列里取出一个任务来处理。
还有一个特殊的终止项,主线程可以把它放到队列里,告诉工作线程结束。我的问题是,工作线程在结束之前,是否应该尽量调用 acquire
来匹配任何未完成的 release
?这个信号量是属于工作线程的,线程结束后就不会再用了;不过这个进程可能会长时间运行,并且将来会创建很多工作对象、线程和信号量。
如果信号量的计数不是零,直接放弃它是否安全?(我觉得可能是安全的,但想确认一下。)
不管是否安全,你觉得在结束之前把信号量完全清理干净是不是更“好”?
我主要关心的是Python中的信号量行为(更具体来说是CPython)。不过,如果你有关于其他语言(比如C的pthread)的信号量的一般经验分享,我也很欢迎。
1 个回答
2
#1: 是的,放弃一个计数不为零的信号量是安全的。毕竟它只是一个数值。
#2: 减少代码量会更好。尽量写出最少的、清晰的代码来实现正确的功能。