python停止线程_Python如何停止线程操作

我想知道如何用CTRL+C或smth来停止控制台中的程序。

问题是我的程序中有两个线程。线程1爬网并提取一些数据,线程2以可读的格式向用户显示这些数据。两个部分共享同一个数据库。我这样管理他们:from threading import Thread

import ResultsPresenter

def runSpider():

Thread(target=initSpider).start()

Thread(target=ResultsPresenter.runPresenter).start()

if __name__ == "__main__":

runSpider()

我该怎么做?

好的,我创建了自己的线程类:import threading

class MyThread(threading.Thread):

"""Thread class with a stop() method. The thread itself has to check

regularly for the stopped() condition."""

def __init__(self):

super(MyThread, self).__init__()

self._stop = threading.Event()

def stop(self):

self._stop.set()

def stopped(self):

return self._stop.isSet()

好的,我将在这里发布resultPresenter和crawler的片段。

下面是resultPresenter的代码:# configuration

DEBUG = False

DATABASE = database.__path__[0] + '/database.db'

app = Flask(__name__)

app.config.from_object(__name__)

app.config.from_envvar('CRAWLER_SETTINGS', silent=True)

def runPresenter():

url = "http://127.0.0.1:5000"

webbrowser.open_new(url)

app.run()

这里还有两个方法我省略了—其中一个连接到数据库,第二个方法加载html模板以显示结果。我重复此操作,直到满足条件或用户停止程序(我正试图实现的)。还有另外两个方法—一个是命令行中get的初始链接,另一个是有效参数—如果参数无效,我将不运行crawl()方法。

下面是crawler的简短版本:def crawl(initialLink, maxDepth):

#here I am setting initial values, lists etc

while not(depth >= maxDepth or len(pagesToCrawl) <= 0):

#this is the main loop that stops when certain depth is

#reached or there is nothing to crawl

#Here I am popping urls from url queue, parse them and

#insert interesting data into the database

parser.close()

sock.close()

dataManager.closeConnection()

以下是启动线程中这些模块的init文件:import ResultsPresenter, MyThread, time, threading

def runSpider():

MyThread.MyThread(target=initSpider).start()

MyThread.MyThread(target=ResultsPresenter.runPresenter).start()

def initSpider():

import Crawler

import database.__init__

import schemas.__init__

import static.__init__

import templates.__init__

link, maxDepth = Crawler.getInitialLink()

if link:

Crawler.crawl(link, maxDepth)

killall = False

if __name__ == "__main__":

global killall

runSpider()

while True:

try:

time.sleep(1)

except:

for thread in threading.enumerate():

thread.stop()

killall = True

raise

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值