【发布时间】:2018-08-29 10:01:29
【问题描述】:
我正在使用线程处理 Python 2.7 脚本。
有一个全局连接对象,每个线程都必须使用它。
代码示例:
from threading import Thread
import time
class Connection:
def __init__(self):
self.connected = True
def send_command(self, command):
return str(command)+' result'
class Config:
def __init__(self):
self.conn = Connection()
def do_remote_config(self):
time.sleep(2)
return self.conn.send_command('my config')
def do_other_remote_config(self):
time.sleep(2)
return self.conn.send_command('my other config')
class Executor:
def execute(self):
config = Config()
worker1 = Worker(config.do_remote_config)
worker1.start()
worker1.join()
print(worker1.result)
worker2 = Worker(config.do_other_remote_config)
worker2.start()
worker2.join()
print(worker2.result)
class Worker(Thread):
def __init__(self, method):
super(Worker, self).__init__()
self.result = None
self.method = method
def run(self):
try:
self.result = self.method()
except Exception as ex:
self.result = ex
if __name__ == "__main__":
e = Executor()
e.execute()
为了确保没有一个线程运行超过 10 分钟,我想杀死每个线程以防达到时间限制。不幸的是,事实证明 Python 线程无法被杀死。
Thread Kill Pill 选项:
由于工作线程的实际复杂性,遗憾的是无法构建某种杀死触发器,让工作线程自行结束。所以,看来我真的需要在这里摆脱线程,因为线程本质上是不能被杀死的。
多进程选项:
使用多进程模块,可以使用不同的进程。然后可以在一定时间后将其杀死。但是,我没有找到一种方法来传递我的连接对象,以便它可以被多个进程使用。
远程过程调用 (RPC) 选项:
RPC 似乎引入了不必要的复杂性,并且可能仍然无法实现终止开关。
问题:
为了能够与所有工作人员一起使用连接对象,同时确保每个工作人员可以在 10 分钟后可靠地被杀死,哪种 Python 技术效果最好?
非常感谢!
【问题讨论】:
标签: python multithreading python-2.7