当前位置: 首页 > news >正文

网站建设分站要备案wordpress grace

网站建设分站要备案,wordpress grace,公众号开发者是什么,网站怎么自动加水印前言 零 我们知道#xff0c;在python里面要终止一个线程#xff0c;常规的做法就是设置/检查 ---标志或者锁方式来实现的。 这种方式好不好呢#xff1f; 应该是不大好的#xff01;因为在所有的程序语言里面#xff0c;突然地终止一个线程#xff0c;这无论如何都…前言 · 零 我们知道在python里面要终止一个线程常规的做法就是设置/检查 ---标志或者锁方式来实现的。 这种方式好不好呢 应该是不大好的因为在所有的程序语言里面突然地终止一个线程这无论如何都不是一个好的设计模式。 同时 有些情况下更甚比如 线程打开一个必须合理关闭的临界资源时比如打开一个可读可写的文件 线程已经创建了好几个其他的线程这些线程也是需要被关闭的(这可存在子孙线程游离的风险啊)。 简单来说就是我们一大群的线程共线了公共资源你要其中一个线程“离场”假如这个线程刚好占用着资源那么强制让其离开的结局就是资源被锁死了大家都拿不到了怎么样是不是有点类似修仙类小说的情节 知道为啥threading仅有start而没有end不 你看线程一般用在网络连接、释放系统资源、dump流文件这些都跟IO相关了你突然关闭线程那这些 没有合理地关闭怎么办是不是就是给自己造bug呢啊 因此这种事情中最重要的不是终止线程而是线程的清理啊。 解决方案 · 壹 一个比较nice的方式就是每个线程都带一个退出请求标志在线程里面间隔一定的时间来检查一次看是不是该自己离开了 import threading class StoppableThread(threading.Thread): Thread class with a stop() method. The thread itself has to check regularly for the stopped() condition. def __init__(self): super(StoppableThread, self).__init__() self._stop_event threading.Event() def stop(self): self._stop_event.set() def stopped(self): return self._stop_event.is_set() 在这部分代码所示当你想要退出线程的时候你应当显示调用stop()函数并且使用join()函数来等待线程合适地退出。线程应当周期性地检测停止标志。 然而还有一些使用场景中你真的需要kill掉一个线程比如当你封装了一个外部库但是这个外部库在长时间调用因此你想中断这个过程。 解决方案 · 貳 接下来的方案是允许在python线程里面raise一个Exception当然是有一些限制的。 def _async_raise(tid, exctype): Raises an exception in the threads with id tid if not inspect.isclass(exctype): raise TypeError(Only types can be raised (not instances)) res ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype)) if res 0: raise ValueError(invalid thread id) elif res ! 1: # if it returns a number greater than one, youre in trouble, # and you should call it again with excNULL to revert the effect ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0) raise SystemError(PyThreadState_SetAsyncExc failed) class ThreadWithExc(threading.Thread): A thread class that supports raising exception in the thread from another thread.def _get_my_tid(self): determines this (selfs) thread id CAREFUL : this function is executed in the context of the caller thread, to get the identity of the thread represented by this instance.if not self.isAlive(): raise threading.ThreadError(the thread is not active) # do we have it cached? if hasattr(self, _thread_id): return self._thread_id # no, look for it in the _active dict for tid, tobj in threading._active.items(): if tobj is self: self._thread_id tid return tid # TODO: in python 2.6, theres a simpler way to do : self.ident raise AssertionError(could not determine the threads id) def raiseExc(self, exctype): Raises the given exception type in the context of this thread. If the thread is busy in a system call (time.sleep(), socket.accept(), ...), the exception is simply ignored. If you are sure that your exception should terminate the thread, one way to ensure that it works is: t ThreadWithExc( ... ) ... t.raiseExc( SomeException ) while t.isAlive(): time.sleep( 0.1 ) t.raiseExc( SomeException ) If the exception is to be caught by the thread, you need a way to check that your thread has caught it. CAREFUL : this function is executed in the context of the caller thread, to raise an excpetion in the context of the thread represented by this instance._async_raise( self._get_my_tid(), exctype ) 正如注释里面描述这不是啥“灵丹妙药”因为假如线程在python解释器之外busy这样子的话终端异常就抓不到啦~ 这个代码的合理使用方式是让线程抓住一个特定的异常然后执行清理操作。这样的话你就能终端一个任务并能合适地进行清除。 解决方案 · 叁 假如我们要做个啥事情类似于中断的方式那么我们就可以用thread.join方式。 join的原理就是依次检验线程池中的线程是否结束没有结束就阻塞直到线程结束如果结束则跳转执行下一个线程的join函数。 先看看这个 1. 阻塞主进程专注于执行多线程中的程序。 2. 多线程多join的情况下依次执行各线程的join方法前头一个结束了才能执行后面一个。 3. 无参数则等待到该线程结束才开始执行下一个线程的join。 4. 参数timeout为线程的阻塞时间如 timeout2 就是罩着这个线程2s 以后就不管他了继续执行下面的代码。 # coding: utf-8 # 多线程join import threading, time def doWaiting1(): print start waiting1: time.strftime(%H:%M:%S) \n time.sleep(3) print stop waiting1: time.strftime(%H:%M:%S) \n def doWaiting2(): print start waiting2: time.strftime(%H:%M:%S) \n time.sleep(8) print stop waiting2: , time.strftime(%H:%M:%S) \n tsk [] thread1 threading.Thread(target doWaiting1) thread1.start() tsk.append(thread1) thread2 threading.Thread(target doWaiting2) thread2.start() tsk.append(thread2) print start join: time.strftime(%H:%M:%S) \n for tt in tsk: tt.join() print end join: time.strftime(%H:%M:%S) \n 默认join方式也就是不带参阻塞模式只有子线程运行完才运行其他的。 1、 两个线程在同一时间开启join 函数执行。 2、waiting1 线程执行等待了3s 以后结束。 3、waiting2 线程执行等待了8s 以后运行结束。 4、join 函数返回到了主进程执行结束。 这里是默认的join方式是在线程已经开始跑了之后然后再join的注意这点join之后主线程就必须等子线程结束才会返回主线。 join的参数也就是timeout参数改为2即join2那么结果就是如下了 两个线程在同一时间开启join 函数执行。 wating1 线程在执行等待了三秒以后完成。 join 退出两个2s一共4s36-324无误。 waiting2 线程由于没有在 join 规定的等待时间内4s完成所以自己在后面执行完成。 join(2)就是:我给你子线程两秒钟每个的2s钟结束之后我就走我不会有丝毫的顾虑
http://www.pierceye.com/news/798950/

相关文章:

  • 广西南宁官方网站企业wordpress和ueeshop
  • access数据库做网站自贸区注册公司有什么优势
  • 福州做网站公司企信网企业信用信息系统黑龙江
  • 网站建设先学什么保定徐水网站建设
  • 济南网站建设哪个好电商创业
  • 如何在年报网站上做遗失公告天津做企业网站公司
  • 嘉兴网站关键词排名网页制作与设计课程设计报告
  • 室内装饰网站模板网络营销的策略
  • 如何做网站充值58百度搜索引擎
  • 专门做衣服的网站有哪些广告公司名字怎么取
  • 亚马逊如何做折扣网站的营销在线3d建模网站
  • 深圳市seo网站设计dz做的网站容易收录吗
  • 西安手机网站wordpress 绑定两个域名
  • 郑州定制网站推广工具平面设计接私活一般多少钱
  • 俄语网站模板网站建设外包网
  • 专门做淘宝特价的网站做网络推广一般是什么专业
  • 网站互动怎么做手机论坛网站
  • 企业免费网站系统wordpress default template
  • 怎样做软件网站酒店的网络营销是什么
  • 企业为什么做网站 图片做美团网站多少钱
  • 社交网站建设网站内容策划方案
  • 二手商品网站制作软件公司取名字大全
  • 网站页面切换效果抚顺市营商环境建设局网站
  • 网站开发选择什么软件互联网营销设计
  • 网站推广结束语如何评价一个网站做的好不好
  • 连云港做网站推广网站建设为什么需要备案
  • 网站建站步骤在越南做一个网站怎么做
  • 怎么在word里做网站wordpress 父页面跳转
  • 网站添加验证码WordPress食谱小程序
  • 网站打包app公明做网站