python中stop_thread_Python threading.Thread只能用私有方法self来停止.__ Thread_stop()

我有一个函数接受大量的x,y对作为输入,使用numpy和scipy做一些精细的曲线拟合,然后返回一个值.为了尝试加快速度,我尝试使用Queue.Queue将数据提供给两个线程.数据完成后.我试图让线程终止,然后结束调用进程并将控制权返回给

shell.

我试图理解为什么我必须在threading中使用私有方法.线程停止我的线程并将控制返回到命令行.

self.join()不会结束程序.获得控制权的唯一方法是使用私有停止方法.

def stop(self):

print "STOP CALLED"

self.finished.set()

print "SET DONE"

# self.join(timeout=None) does not work

self._Thread__stop()

这是我的代码的近似值:

class CalcThread(threading.Thread):

def __init__(self,in_queue,out_queue,function):

threading.Thread.__init__(self)

self.in_queue = in_queue

self.out_queue = out_queue

self.function = function

self.finished = threading.Event()

def stop(self):

print "STOP CALLED"

self.finished.set()

print "SET DONE"

self._Thread__stop()

def run(self):

while not self.finished.isSet():

params_for_function = self.in_queue.get()

try:

tm = self.function(paramsforfunction)

self.in_queue.task_done()

self.out_queue.put(tm)

except ValueError as v:

#modify params and reinsert into queue

window = params_for_function["window"]

params_for_function["window"] = window + 1

self.in_queue.put(params_for_function)

def big_calculation(well_id,window,data_arrays):

# do some analysis to calculate tm

return tm

if __name__ == "__main__":

NUM_THREADS = 2

workers = []

in_queue = Queue()

out_queue = Queue()

for i in range(NUM_THREADS):

w = CalcThread(in_queue,out_queue,big_calculation)

w.start()

workers.append(w)

if options.analyze_all:

for i in well_ids:

in_queue.put(dict(well_id=i,window=10,data_arrays=my_data_dict))

in_queue.join()

print "ALL THREADS SEEM TO BE DONE"

# gather data and report it from out_queue

for i in well_ids:

p = out_queue.get()

print p

out_queue.task_done()

# I had to do this to get the out_queue to proceed

if out_queue.qsize() == 0:

out_queue.join()

break

# Calling this stop method does not seem to return control to the command line unless I use threading.Thread private method

for aworker in workers:

aworker.stop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值