龙卷风多进程崩溃与nltk
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了龙卷风多进程崩溃与nltk相关的知识,希望对你有一定的参考价值。
我在龙卷风应用程序中遇到了一些非常奇怪的行为。我正在运行很多进程,每个进程都有自己的HTTP服务器并在不同的端口上运行。
我在系统中添加了一个新进程,这是另一个TCPServer类,它监听一个完全不同的端口,并且没有与其他进程进行任何交互。
我把新服务器按如下方式启动:
def runSimService(port):
sim=SimService()
sim.listen(port)
currentIOLoop = tornado.ioloop.IOLoop.current()
currentIOLoop.start()
class SimService(TCPServer):
def __init__(self,host='localhost',motorport=27017):
TCPServer.__init__(self)
self.log=logging.getLogger("tornado.access")
# Needs to contain a User class log.
self.con=motor.MotorClient(host,motorport)
self.db=self.con.pDB
self.col=self.db.pCol
基本上这是我调试时留下的唯一代码。我得到的崩溃不是一个正常的python异常崩溃,这让我很担心。
我正在开发mac。有人可以解释一下这个崩溃是我的代码有问题还是这里还有其他事情发生?
更新:
好的,这真的很奇怪,只有当我导入以下内容时才会发生:
from nltk.stem.snowball import SnowballStemmer
要么
from nltk import word_tokenize, pos_tag
或者nltk一般......
图书馆之间会发生一些奇怪的互动吗?我被卡住了
用于创建流程的代码
if __name__ =='__main__':
AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient",max_clients=2000)
processes=[]
processes.append(Process(target=runSimServer,args=(...,)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))
# write pids to pid/ directory for use with the shutdown program
with open("pid/"+__file__.split(".")[0]+".pid","w") as f:
for p in processes:
p.start()
f.write(str(p.pid)+"
")
谢谢
答案
该崩溃消息的关键部分是“多线程进程分叉”。如果要同时使用线程和进程,则必须在创建任何线程之前分叉所有进程。看起来nltk
在导入时会创建一些线程。如果您还使用多个进程(它看起来不像您引用的代码,但显然不完整),则必须在所有进程启动后才导入nltk
。
以上是关于龙卷风多进程崩溃与nltk的主要内容,如果未能解决你的问题,请参考以下文章
带有 AssertionError 的龙卷风 websocket 崩溃