Geo*_*rge 15 python multithreading
我正在尝试编写一个侦听套接字,stdin和从文件描述符读取的unix客户端程序.我将每个任务分配给一个单独的线程,并使用同步队列和信号量成功地与"主"应用程序通信.问题是,当我想关闭这些子线程时,它们都会在输入时阻塞.此外,线程无法在线程中注册信号处理程序,因为在Python中只允许执行主线程.
有什么建议?
没有好办法解决这个问题,特别是当线程阻塞时.
我有一个类似的问题(Python:如何终止阻塞线程),我能够阻止我的线程的唯一方法是关闭底层连接.这导致阻塞引发和异常的线程然后允许我检查停止标志并关闭.
示例代码:
class Example(object):
def __init__(self):
self.stop = threading.Event()
self.connection = Connection()
self.mythread = Thread(target=self.dowork)
self.mythread.start()
def dowork(self):
while(not self.stop.is_set()):
try:
blockingcall()
except CommunicationException:
pass
def terminate():
self.stop.set()
self.connection.close()
self.mythread.join()
Run Code Online (Sandbox Code Playgroud)
另一件需要注意的事情是通常阻塞操作通常会提供超时.如果您有这个选项,我会考虑使用它.我的最后一点评论是你总是可以将线程设置为deamonic,
来自pydoc:
线程可以标记为"守护程序线程".这个标志的意义在于,当只剩下守护进程线程时,整个Python程序都会退出.初始值继承自创建线程.可以通过守护程序属性设置该标志.
| 归档时间: |
|
| 查看次数: |
27623 次 |
| 最近记录: |