导航:首页 > 编程语言 > python强制终止线程

python强制终止线程

发布时间:2024-07-07 12:33:01

python中如何中止一个线程

简单来说,它kill的原理是设置一个flag位,然后线程在执行下一句python语句检测到这个位被设置了之后,就会自行退出,以达到kill的目的。 另外还有一种更容易理解的flag置位的实现方式:classKillableThread(threading.Thread):def__init__(self):threading.Thread. __init__(self)self.stop = Falsedefrun(self):whilenotself.stop:somefunction() 这种方式相比第一种而言,又有一点不足:kill生效的时限,最大等于somefunction执行一遍所花的时间。 而第一种方式,在下一句python语句执行时就会生效。 不过可以料想,第一种实现方式,整体的执行效率会慢一点。

② 如何终止一个bottle 线程 python

  1. 问题描述的不太准确,你指的是python里bottle那个web框架么?通常运行的时候,程序一开始就会提示“Hit CTRL-C to quite”,按照字面上意思,Contrl+C退出就行了。

  2. 如果你用了Gunicorn之类的WSGI HTTP服务器来并发Bottle的话,那么把Gunicorn进程结束掉就好了。

  3. 如果是用python的multiprocessing弄出来的bottle服务进程,那么在需要结束的地方先.join()。

③ 弱问python的问题.怎么终止一个子线程

等待串口数据导致线程自己sleep而没有机会执行,主线程的join没法继续,方法就是这样的,换成这个能执行

fromthreadingimport*
importtime

classMyThread(Thread):
defrun(self):
self.ifdo=True;
whileself.ifdo:
print'Iamrunning...'
time.sleep(0.1)

defstop(self):
print'Iwillstopit...'
self.ifdo=False;

tr=MyThread()
tr.setDaemon(True)
tr.start()
time.sleep(1)
tr.stop()
tr.join()

这样就更直观了

fromthreadingimport*
importtime

classMyThread(Thread):
defrun(self):
self.ifdo=True;
whileself.ifdo:
print'Iamrunning...'
time.sleep(2)

defstop(self):
print'Iamstoppingit...'
self.ifdo=False;

tr=MyThread()
tr.setDaemon(True)
tr.start()
print'Iwillstopit...'
time.sleep(5)
tr.stop()
tr.join()

④ python濡备綍鍦ㄥ瓙绾跨▼涓鍏抽棴涓昏繘绋嬶纻锛

锷炴硶寰埚氥傞氩父镄勫姙娉曟槸锛屽瓙绾跨▼鍑哄纾甯稿悗锛屼富杩涚▼妫镆ュ埌瀹幂殑鐘舵佷笉姝e父锛岀劧钖庤嚜宸变富锷ㄥ皢鍏朵綑绾跨▼阃鍑猴纴链钖庤嚜宸卞啀阃鍑恒傝繖鏄绋冲Ε镄勫姙娉曘

鍙﹀栫殑锷炴硶鏄锛屾煇涓涓瀛愮嚎绋嬩笓鐢ㄤ簬鐩戞带鐘舵併傚畠鍙戠幇鐘舵佷笉瀵规椂锛岀洿鎺ュ己鍒惰繘绋嬮鍑恒傚姙娉1锛屽彂娑堟伅缁欎富杩涚▼锛岃╀富杩涚▼阃鍑恒傚姙娉2锛氱敤kill, pskill绛夋柟娉曪纴鐩存帴鎸夎繘绋婸ID𨱒杩涚▼銆

⑤ Python里如何终止一个线程

Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下:

fromthreadingimport*
importtime

classMyThread(Thread):
defrun(self):
self.ifdo=True;
whileself.ifdo:
print'Iamrunning...'
time.sleep(2)

defstop(self):
print'Iamstoppingit...'
self.ifdo=False;

tr=MyThread()
tr.setDaemon(True)
tr.start()
print'Iwillstopit...'
time.sleep(5)
tr.stop()
tr.join()

⑥ 求助python多线程,执行到100多个停止了

python 线程 暂停, 恢复, 退出
我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 不过, 我们可以自己实现这些. 一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了. 但暂停和恢复线程就有点难了, 我一直也不清除有什么好的方法, 直到我看到threading中Event对象的wait方法的描述时.
wait([timeout])
Block until the internal flag is true. If the internal flag is true on entry, return immediately. Otherwise, block until another thread calls set() to set the flag to true, or until the optional timeout occurs.
阻塞, 直到内部的标志位为True时. 如果在内部的标志位在进入时为True时, 立即返回. 否则, 阻塞直到其他线程调用set()方法将标准位设为True, 或者到达了可选的timeout时间.
When the timeout argument is present and not None, it should be a floating point number specifying a timeout for the operation in seconds (or fractions thereof).
This method returns the internal flag on exit, so it will always return True except if a timeout is given and the operation times out.
当给定了timeout参数且不为None, 它应该是一个浮点数,以秒为单位指定操作的超时(或是分数)。
此方法在退出时返回内部标志,因此除非给定了超时且操作超时,否则它将始终返回True。
Changed in version 2.7: Previously, the method always returned None.
2.7版本以前, 这个方法总会返回None.
<br>
利用wait的阻塞机制, 就能够实现暂停和恢复了, 再配合循环判断标识位, 就能实现退出了, 下面是代码示例:
#!/usr/bin/env python
# coding: utf-8
import threading
import time
class Job(threading.Thread):
def __init__(self, *args, **kwargs):
super(Job, self).__init__(*args, **kwargs)
self.__flag = threading.Event() # 用于暂停线程的标识
self.__flag.set() # 设置为True
self.__running = threading.Event() # 用于停止线程的标识
self.__running.set() # 将running设置为True
def run(self):
while self.__running.isSet():
self.__flag.wait() # 为True时立即返回, 为False时阻塞直到内部的标识位为True后返回
print time.time()
time.sleep(1)
def pause(self):
self.__flag.clear() # 设置为False, 让线程阻塞
def resume(self):
self.__flag.set() # 设置为True, 让线程停止阻塞
def stop(self):
self.__flag.set() # 将线程从暂停状态恢复, 如何已经暂停的话
self.__running.clear() # 设置为False
下面是测试代码:
a = Job()
a.start()
time.sleep(3)
a.pause()
time.sleep(3)
a.resume()
time.sleep(3)
a.pause()
time.sleep(2)
a.stop()
<br>
测试的结果:
这完成了暂停, 恢复和停止的功能. 但是这里有一个缺点: 无论是暂停还是停止, 都不是瞬时的, 必须等待run函数内部的运行到达标志位判断时才有效. 也就是说操作会滞后一次.
但是这有时也不一定是坏事. 如果run函数中涉及了文件操作或数据库操作等, 完整地运行一次后再退出, 反而能够执行剩余的资源释放操作的代码(例如各种close). 不会出现程序的文件操作符超出上限, 数据库连接未释放等尴尬的情况.

⑦ Python ThreadPoolExecutor 寮傚父涓姝㈣В鍐虫柟妗

阃氩父𨱍呭喌锛屾垜浠鍒╃敤 Ctrl+C 璁╃▼搴忚Е鍙 KeyboardInterrupt 寮傚父锛屼腑姝㈢▼搴忚繍琛屻绾跨▼姹鏂规堜笅锛 Ctrl-C 澶辨晥锛屽綋绾跨▼姹犻噷镄勭嚎绋嬩换锷¤窇瀹屽悗锛屾墠浼氲Е鍙 KeyboardInterrupt

涓娄笅鏂囩$悊鍗忚鐩稿綋浜庨殣镐у湴鐪佺暐浜 threadPool.shutdown(wait=True) 锛屽悓镞讹纴绋嫔簭姝e父镓ц屽畬鎴愭垨鍑虹幇寮傚父涓鏂镄勬椂鍊欙纴灏变细璋幂敤 __exit__() 鏂规硶锛屾帴涓嬫潵杩涜屽纾甯镐腑姝㈢殑锘虹銆

阃傜敤浜 Django 绛 WEB 搴旂敤妗嗘灦锛屾湰韬镊甯澶氱嚎绋锛屼慨鏀鍏ㄥ眬鍙橀噺绠鍗曪纴浣呜佹敞镒绾跨▼瀹夊叏銆

绋嫔簭杩愯屼腑锛屽彧闇 sign = 1 鎴栬 exiting.set() 锛寃orker 鍑芥暟鍒栾烦杩囦富瑕佽繍绠楅儴鍒嗭纴鍓╀綑绾跨▼浠诲姟灏呜繀阃熷畬鎴愶纴鍙樼浉杈惧埌涓姝㈠氱嚎绋嬩换锷$殑鐩镄勚

鎻愪氦缁欑嚎绋嬫睁镄勬疮涓绾跨▼浠诲姟 task 锷犲叆 threadPool 涓锛屾柟渚垮悗缁瀵 task 杩涜屾搷浣溿傚綋 for 寰鐜鍐呯殑 task 鍏ㄩ儴鎻愪氦钖庯纴绾跨▼浼氩啀钖庡彴杩愯岋纴钥岃繘绋嬭繍琛岃呖 while 涓鍫靛烇纴鐩磋呖 threadPool 涓链钖庝竴涓绾跨▼鏄钖 .done() 銆傝嫢杩涚▼鍫靛炲湪 while 涓鎺ユ敹鍒 Ctrl+C KeyboardInterrupt 寮傚父锛屽垯浠庡悗寰鍓嶅彇娑 threadPool 涓镓链変换锷★纴杈惧埌涓姝㈢洰镄勚

阅读全文

与python强制终止线程相关的资料

热点内容
java类返回值 浏览:904
程序员那么可爱姜逸城什么时候喜欢 浏览:165
程序员喂猫 浏览:642
网络平台的源码是什么东西 浏览:438
程序员误清空数据库 浏览:700
加密货币股票美上市时间 浏览:671
苏州程序员接私活有风险吗 浏览:259
android相机亮度 浏览:93
使用美团app如何骑小黄车 浏览:511
荣耀如何调节App字体 浏览:669
布卡pdf 浏览:487
火神山球场服务器怎么玩 浏览:512
手游方舟服务器关了怎么办 浏览:649
钞票美国人改加密了 浏览:770
mount命令nfs 浏览:664
单片机tl 浏览:853
it公司笔试题java 浏览:47
编译和解释执行区别 浏览:304
压缩面膜配什么水 浏览:266
linux显示配置 浏览:506